Mengoptimumkan Pertanyaan MySQL dengan Klausa WHERE IN
Semasa menyelesaikan masalah pertanyaan pangkalan data aplikasi Rails yang perlahan, anda menghadapi pertanyaan menggunakan klausa IN yang melakukan imbasan jadual penuh walaupun wujudnya indeks yang sesuai. Contohnya, pertanyaan seperti:
SELECT `user_metrics`.* FROM `user_metrics` WHERE (`user_metrics`.user_id IN (N,N,N,N,N,N,N,N,N,N,N,N))
gagal menggunakan indeks pada lajur user_id.
Memahami Penggunaan Indeks MySQL
MySQL melakukannya tidak menggunakan indeks secara automatik apabila klausa IN hadir dalam keadaan WHERE. Untuk memaksa penggunaan indeks, anda boleh menyiasat pilihan berikut:
Sahkan Kepentingan Saiz Jadual
Dalam jadual kecil, imbasan jadual boleh menjadi lebih cekap daripada carian indeks kerana pengurangan I/O overhed. Pastikan jadual pengguna_metrik anda cukup besar untuk menjamin penggunaan indeks.
Pengoptimuman Berasaskan Kos
MySQL juga menggabungkan pengoptimum berasaskan kos. Jalankan ANALYZE pada jadual anda untuk memberikan maklumat statistik kepada pengoptimum. Ini boleh membantunya membuat keputusan yang lebih termaklum tentang rancangan pelaksanaan pertanyaan. Kegagalan untuk menjalankan ANALYZE boleh membawa kepada prestasi yang tidak optimum.
Penggunaan Petunjuk
MySQL membenarkan penggunaan pembayang, seperti FORCE INDEX, untuk menunjukkan secara jelas indeks yang hendak digunakan. Walau bagaimanapun, ini mungkin tidak praktikal dalam aplikasi Rails, kerana ia mengalahkan tujuan ActiveRecord dan memperkenalkan pengubahsuaian pertanyaan manual.
Pertimbangkan Pangkalan Data Alternatif
Dalam sesetengah kes, MySQL pengoptimum pertanyaan mungkin menunjukkan had. Jika prestasi masih tidak memuaskan, pertimbangkan untuk meneroka penyelesaian pangkalan data alternatif, seperti Postgres, yang telah dilaporkan mengendalikan pertanyaan sedemikian dengan lebih cekap dalam aplikasi Rails berasaskan ActiveRecord.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan MySQL dengan Klausa Slow WHERE IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!