Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan MySQL lebih lambat setelah pembuatan indeks

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Simpan data ke PHP / Mysql dengan edit sebaris di CKEditor

  2. Mencegah Injeksi SQL di C

  3. mysql dump - kecualikan beberapa data tabel

  4. Gabung Kiri tidak mengembalikan semua baris

  5. Buat tabel dengan PHP dan isi dari MySQL