Rumah > Artikel > pangkalan data > Apakah sebab mysql dalam kegagalan indeks?
1 dalam pertanyaan
dalam pertanyaan ialah kaedah pertanyaan yang biasa digunakan dalam MySQL, yang boleh menanyakan berbilang nilai atau julat berbilang dalam satu pertanyaan. perlawanan. Contohnya:
SELECT * FROM table WHERE col1 IN (1,2,3);
Pernyataan SQL ini akan mencari semua baris dengan lajur col1 bersamaan dengan 1, 2 atau 3. Semasa pemprosesan pertanyaan dalam, MySQL akan membandingkan setiap nilai dalam kurungan dengan indeks, jadi pertanyaan dalam akan memberi kesan tertentu terhadap kecekapan indeks.
2. Sebab kegagalan indeks
Julat pertanyaan terlalu besar
Jika julat pertanyaan data Jika terlalu besar, MySQL akan menganggapnya lebih cekap untuk mencari data melalui imbasan jadual penuh daripada menggunakan indeks. Sebagai contoh, terdapat 100,000 rekod dalam jadual, dan jika julat pertanyaan melebihi lebih daripada 25% daripada rekod, MySQL akan memilih imbasan jadual penuh dan bukannya menggunakan indeks untuk pertanyaan. Oleh itu, jika julat pertanyaan terlalu besar, ia boleh menyebabkan kegagalan indeks.
Bilangan nilai terlalu banyak
MySQL akan menganggap bahawa imbasan jadual penuh adalah lebih cekap daripada mencari data melalui indeks . Apabila pertanyaan dalam perlu sepadan Apabila terdapat terlalu banyak nilai. Pada masa ini, maksud pengindeksan tidak hebat. Oleh itu, apabila menggunakan dalam pertanyaan, anda harus cuba mengurangkan bilangan nilai padanan sebanyak mungkin.
3. Kaedah Pengoptimuman
Optimumkan pernyataan pertanyaan
Kurangkan skop dan skop pertanyaan sebanyak mungkin Bilangan nilai yang perlu dipadankan boleh dioptimumkan dengan kaedah berikut:
a Optimumkan keadaan di mana pertanyaan, gunakan DAN penyambung logik sebanyak mungkin, dan mengurangkan penggunaan penyambung logik ATAU.
b. Gunakan pertanyaan julat dan bukannya dalam pertanyaan. Contohnya, gunakan operator ANTARA dan DAN bukannya IN.
c. Kurangkan senarai nilai dalam pertanyaan sebanyak mungkin dan gunakan subkueri untuk mengoptimumkannya. Contohnya:
SELECT * FROM table WHERE col1 IN (SELECT col1 FROM table WHERE col2='xxx');
Tambah indeks
Apabila membina jadual, menetapkan lajur untuk disoal sebagai lajur indeks boleh meningkatkan kecekapan pertanyaan. Kurangkan penggunaan dalam pertanyaan sebanyak mungkin.
Atas ialah kandungan terperinci Apakah sebab mysql dalam kegagalan indeks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!