Rumah > Artikel > pangkalan data > Mengapa Pertanyaan MySQL Menunjukkan \"Menggunakan Sementara\" dan \"Menggunakan Filesort\" dan Bagaimana Anda Boleh Mengoptimumkannya?
Pengoptimuman MySQL: Memahami "Menggunakan indeks, menggunakan sementara, menggunakan failsort"
Apabila melaksanakan pertanyaan, MySQL mungkin menggunakan jadual sementara dan failsort, seperti yang ditunjukkan oleh mesej "Menggunakan sementara" dan "Menggunakan failsort." Mari kita terokai maksud ini dalam konteks pertanyaan khusus:
EXPLAIN SELECT el.object_id, leo.object_desc, COUNT(el.object_id) AS count_rows FROM event_log AS el LEFT JOIN lookup_event_objects AS leo ON leo.object_id = el.object_id GROUP BY el.object_id ORDER BY count_rows DESC, leo.object_desc ASC
"Menggunakan sementara"
Menurut dokumentasi MySQL, jadual sementara dicipta apabila:
Dalam pertanyaan yang diberikan, klausa ORDER BY mengisih mengikut medan pengiraan "count_rows", yang tiada dalam klausa GROUP BY, dan klausa GROUP BY menggunakan lajur daripada jadual bercantum "lookup_event_objects." Oleh itu, MySQL mencipta jadual sementara untuk melaksanakan pengumpulan dan pengisihan.
"Menggunakan filesort"
MySQL menggunakan failsort apabila operasi isihan tidak boleh dilakukan menggunakan indeks. Dalam pertanyaan ini, isihan pada medan pengiraan "count_rows" tidak boleh diindeks, jadi MySQL menggunakan failsort untuk melaksanakan pengisihan.
Pengoptimuman
Untuk mengoptimumkan pertanyaan ini, anda boleh membuat indeks pada "count_rows." Walau bagaimanapun, memandangkan ia adalah medan pengiraan, anda perlu menggunakan helah MySQL:
CREATE TABLE lookup_event_objects_temp AS SELECT object_id, object_desc, COUNT(DISTINCT event_id) AS count_rows FROM event_log GROUP BY object_id; CREATE INDEX idx_count_rows ON lookup_event_objects_temp (count_rows); ALTER TABLE lookup_event_objects_temp RENAME TO lookup_event_objects;
Dengan mencipta jadual sementara ini dengan medan "count_rows" yang diindeks, pertanyaan boleh menggunakan indeks untuk melaksanakan dengan cekap mengisih, menghapuskan keperluan untuk menyusun fail dan mengurangkan penggunaan jadual sementara.
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Menunjukkan \"Menggunakan Sementara\" dan \"Menggunakan Filesort\" dan Bagaimana Anda Boleh Mengoptimumkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!