Rumah  >  Soal Jawab  >  teks badan

Pengindeksan pertanyaan carian dinamik berdasarkan MySQL

Ini adalah projek pertama saya jadi saya minta maaf kerana saya mempunyai banyak soalan.

Saya cuba mencipta indeks untuk mencari jadual Cat di atas.

Namun, saya tidak tahu bagaimana untuk menerapkannya kerana terdapat beberapa kes untuk klausa di mana.

SELECT *
FROM CAT
WHERE birth between '2000-01-01' and '2009-12-31';

SELECT *
FROM CAT
WHERE birth between '2000-01-01' and '2009-12-31'
and NAME like '%blue%';

SELECT *
FROM CAT
WHERE NAME like '%blue%'
AND AGE = 5;

Jika boleh, bolehkah saya membuat indeks berasingan untuk umur, nama dan kelahiran? Jika tidak, adakah saya perlu mencipta (umur), (umur, nama), (umur, kelahiran), (umur, nama, kelahiran)... untuk setiap kes?

Walaupun selepas membaca buku, saya tidak pasti, jadi saya meninggalkan anda dengan soalan. Harap anda tidak berasa buruk tentang perkara ini.

Saya menggunakan mysql v8.0 innoDB.

Terima kasih!

P粉170438285P粉170438285184 hari yang lalu312

membalas semua(1)saya akan balas

  • P粉277464743

    P粉2774647432024-03-31 15:26:09

    WHERE birth between '2000-01-01' and '2009-12-31'

    Mungkinakan mendapat bantuan

    INDEX(birth)

    Tetapi sila ambil perhatian: jika birth 的类型为 DATETIME, anda kehilangan sebahagian besar 31/12.

    and NAME like '%blue%';

    Tiada pengindeksan akan membantu kerana terkemuka wildcard.

    AND AGE = 5

    Reka bentuk seni binanya sangat teruk. Bayangkan apa yang berlaku apabila kucing mempunyai hari lahir. Anda mesti mengemas kini lajur ini. Sebaliknya, gunakan birthCURDATE() untuk melakukan aritmetik tarikh.

    Tetapi jika anda menyimpan lajur age, maka ini mungkin membantu:

    INDEX(age)

    Saya memperkenalkan pertanyaan cat.birth dalam soalan lain hari ini; Sila lihat cat.birth 查询;看见。请参阅我的 Index Cookbook 了解有关如何为给定的 SELECT 构建合适的索引。它显示了 WHERE ... AND ... 的哪些情况可以使用“复合”(多列)INDEXBuku Masakan Indeks

    saya untuk mendapatkan maklumat tentang cara membuat yang diberikan SELECT Bina indeks yang sesuai. Ia menunjukkan di mana WHERE ... AND ... boleh digunakan untuk kelebihan yang baik menggunakan "komposit" (berbilang lajur) INDEX. Tiada satu pun daripada contoh anda boleh menggunakan indeks komposit. 🎜

    balas
    0
  • Batalbalas