Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan Saya Menggunakan Jadual Sementara dan Isih Fail?

Mengapa Pertanyaan Saya Menggunakan Jadual Sementara dan Isih Fail?

Susan Sarandon
Susan Sarandonasal
2024-11-05 01:15:02345semak imbas

Why Does My Query Use Temporary Tables and Filesort?

Mengapa MySQL Menggunakan Temporary dan Filesort dalam Pertanyaan Ini

Pertanyaan anda untuk mengekstrak statistik objek daripada jadual event_log dan lookup_event_objects menghadapi kesesakan prestasi, seperti yang ditunjukkan oleh output EXPLAIN "Menggunakan indeks; Menggunakan sementara; Menggunakan failsort." Inilah sebabnya:

Jadual Sementara

MySQL menggunakan jadual sementara apabila terdapat ketidakpadanan antara klausa ORDER BY dan GROUP BY, atau apabila lajur susunan atau pengumpulan tergolong bukan -meja bercantum. Dalam kes ini, pertanyaan anda mengalami keadaan pertama, kerana klausa ORDER BY (count_rows DESC, leo.object_desc ASC) berbeza daripada GROUP BY clause (el.object_id).

Filesort

"Menggunakan filesort" menunjukkan bahawa MySQL tidak dapat melaksanakan pengisihan yang dinyatakan dalam klausa ORDER BY menggunakan indeks. Memandangkan anda membuat pesanan mengikut medan yang dikira (count_rows), pangkalan data perlu melakukan imbasan jadual lengkap dan mengisih keputusan.

Penyelesaian Kemungkinan

Seperti yang dicadangkan dalam jawapan yang diberikan, penyelesaiannya adalah untuk menghapuskan percanggahan antara klausa ORDER BY dan GROUP BY. Anda boleh menggantikan alias count_rows dengan operasi kiraan sebenar dalam klausa GROUP BY:

SELECT
    el.object_id,
    leo.object_desc,
    COUNT(el.object_id) AS count
FROM
    event_log el
LEFT JOIN
    lookup_event_objects leo ON leo.object_id = el.object_id
GROUP BY
    el.object_id,
    count
ORDER BY
    count DESC,
    leo.object_desc ASC;

Ini akan menghapuskan keperluan untuk jadual sementara dan isihan fail, yang berpotensi meningkatkan prestasi pertanyaan.

Atas ialah kandungan terperinci Mengapa Pertanyaan Saya Menggunakan Jadual Sementara dan Isih Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn