Apakah realistis untuk memiliki begitu banyak baris dengan price
yang sama ? Apakah realistis untuk mengembalikan 444 ribu baris dari kueri? Saya menanyakan ini karena pengoptimalan kueri didasarkan pada data "normal".
Sebuah indeks (misalnya, INDEX(price)
) berguna saat mencari price
yang terjadi beberapa kali. Bahkan, Pengoptimal menghindari indeks jika melihat bahwa nilai yang dicari muncul lebih dari sekitar 20% dari waktu. Sebaliknya, itu hanya akan mengabaikan indeks dan melakukan apa yang Anda uji terlebih dahulu--cukup pindai seluruh tabel, abaikan setiap baris yang tidak cocok.
Anda seharusnya dapat melihatnya dengan melakukan
EXPLAIN select * from books where price = 10
dengan dan tanpa indeks. Atau, Anda dapat mencoba:
EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10
Tapi, ... Tampaknya Pengoptimal tidak mengabaikan indeks. Saya melihat bahwa "kardinalitas" dari price
adalah "1", yang menyiratkan bahwa hanya ada satu nilai berbeda di kolom itu. 'Statistik' ini salah atau menyesatkan. Silakan jalankan ini dan lihat apa yang berubah:
ANALYZE TABLE books;
Ini akan menghitung ulang statistik melalui beberapa pemeriksaan acak, dan mungkin ubah "1" menjadi mungkin "2".
Saran umum:Waspadalah terhadap tolok ukur yang bertentangan dengan data yang dibuat-buat.