首頁 >資料庫 >mysql教程 >為什麼我的查詢使用臨時表和文件排序?

為什麼我的查詢使用臨時表和文件排序?

Susan Sarandon
Susan Sarandon原創
2024-11-05 01:15:02303瀏覽

Why Does My Query Use Temporary Tables and Filesort?

為什麼MySQL 在此查詢中使用臨時和文件排序

從event_log 和Lookup_event_objects 表中提取性能瓶頸信息的面臨性能瓶頸信息的面臨性能瓶頸,如EXPLAIN 輸出「使用索引;使用臨時;使用檔案排序」所示。原因如下:

臨時表

當 ORDER BY 和 GROUP BY 子句不符時,或當排序或分組列屬於非-連接表。在這種情況下,您的查詢會遇到第一個條件,因為 ORDER BY 子句(count_rows DESC、leo.object_desc ASC)與 GROUP BY 子句 (el.object_id) 不同。

Filesort

「Using filesort」表示MySQL無法使用索引執行ORDER BY子句中指定的排序。由於您是按計算欄位 (count_rows) 進行排序,因此資料庫需要執行完整的表格掃描並對結果進行排序。

可能的解決方案

如建議的根據提供的答案,解決方案是消除 ORDER BY 和 GROUP BY 子句之間的差異。您可以將 count_rows 別名替換為 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;

這將消除對臨時表和檔案排序的需要,從而可能提高查詢的效能。

以上是為什麼我的查詢使用臨時表和文件排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn