Pengoptimuman Masa Pelaksanaan Pertanyaan MySQL
Apabila bekerja dengan pangkalan data yang besar, masa pelaksanaan pertanyaan menjadi faktor penting. Dalam satu senario sedemikian, pangkalan data tapak web dengan 1 juta rekod menghadapi masa pelaksanaan yang berlebihan untuk pertanyaan. Satu contoh pertanyaan, yang dibentangkan di bawah, menunjukkan isu ini:
select * from `ratings` order by id limit 499500, 500
Walaupun percaya bahawa pengendalian 1 juta rekod dalam jadual MySQL tidak sepatutnya menimbulkan masalah, pertanyaan ini secara konsisten mengambil masa lebih seminit untuk dilaksanakan. Penambahan indeks pada lajur id gagal mengurangkan isu ini.
Walau bagaimanapun, setelah meneliti rancangan EXPLAIN untuk pertanyaan ini, didapati bahawa pertanyaan itu menggunakan pendekatan imbasan jadual penuh:
explain select * from `ratings` order by id limit 499500, 500; +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+ | 1 | SIMPLE | ratings | ALL | NULL | NULL | NULL | NULL | 4718592 | Using filesort | +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
Untuk menangani isu ini, adalah dicadangkan klausa tempat digunakan untuk mengecilkan kriteria carian. Apabila klausa tempat ditambahkan, pelan pertanyaan berubah:
explain select * from `ratings` where id>=499501 limit 500; +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+ | 1 | SIMPLE | ratings | range | PRIMARY | PRIMARY | 4 | NULL | 4198581 | Using index condition | +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
Perubahan ini menyebabkan pertanyaan menggunakan pendekatan keadaan indeks, meningkatkan masa pelaksanaannya dengan ketara.
Selain itu, kemungkinan kebuntuan dalam proses pelaksanaan pertanyaan tidak dapat diketepikan. Untuk mendiagnosis kebuntuan, arahan SHOW INNODB STATUS mungkin berguna.
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Masa Pelaksanaan Pertanyaan MySQL untuk Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!