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

Kinerja MYSQL lambat menggunakan filesort

Masalahnya adalah MySQL hanya menggunakan satu indeks saat menjalankan kueri. Jika Anda menambahkan indeks baru yang menggunakan 3 bidang di WHERE klausa, itu akan menemukan baris lebih cepat.

ALTER TABLE `adverts` ADD INDEX price_status_approved(`price`, `status`, `approved`);

Menurut dokumentasi MySQL ORDER BY Optimization :

Inilah yang terjadi dalam kasus Anda. Sebagai output dari EXPLAIN memberitahu kami, pengoptimal menggunakan kunci price untuk menemukan baris. Namun, ORDER BY ada di bidang date_updated yang bukan milik kunci price .

Untuk menemukan baris lebih cepat DAN mengurutkan baris lebih cepat, Anda perlu menambahkan indeks yang berisi semua bidang yang digunakan di WHERE dan di ORDER BY klausa:

ALTER TABLE `adverts` ADD INDEX status_approved_date_updated(`status`, `approved`, `date_updated`);

Bidang yang digunakan untuk menyortir harus berada di posisi terakhir dalam indeks. Tidak ada gunanya menyertakan price dalam indeks, karena kondisi yang digunakan dalam kueri akan mengembalikan rentang nilai.

Jika EXPLAIN masih menunjukkan bahwa ia menggunakan filesort, Anda dapat mencoba memaksa MySQL untuk menggunakan indeks yang Anda pilih:

SELECT adverts.*
FROM adverts
FORCE INDEX(status_approved_date_updated)
WHERE price >= 0
AND adverts.status = 1
AND adverts.approved = 1
ORDER BY date_updated DESC 
LIMIT 19990, 10

Biasanya tidak perlu memaksakan indeks, karena pengoptimal MySQL paling sering melakukan pilihan yang benar. Tapi terkadang itu membuat pilihan yang buruk, atau bukan pilihan terbaik. Anda perlu menjalankan beberapa pengujian untuk melihat apakah itu meningkatkan kinerja atau tidak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu SQL? Apa itu Basis Data? Sistem Manajemen Basis Data Relasional (RDBMS) Dijelaskan dalam Bahasa Inggris Biasa.

  2. Instal mysql-python (Windows)

  3. CREATE TABLE MySQL vs T-SQL dengan Contoh Sintaks

  4. Bagaimana saya bisa mendapatkan kata-kata paling populer dalam sebuah tabel melalui mysql?

  5. Bagaimana kaskade bertahan menggunakan JPA/EclipseLink