首頁  >  文章  >  資料庫  >  為什麼我的 MySQL 查詢會導致臨時表和檔案排序?

為什麼我的 MySQL 查詢會導致臨時表和檔案排序?

Patricia Arquette
Patricia Arquette原創
2024-11-04 08:50:02566瀏覽

Why Does My MySQL Query Cause Temporary Tables and Filesort?

MySQL 中的臨時和檔案排序問題:架構和查詢分析

在具有查找表和日誌記錄表的事件追蹤系統中,旨在按重要性降序顯示物件統計資訊的查詢出現了問題。雖然查詢在少量條目下正確運行,但其 EXPLAIN 結果表明了最佳化的潛力。

相關查詢利用 event_log 和 Lookup_event_objects 表之間的左連接,按 object_id 對結果分組,並按 count_rows 進行排序降序排列,然後按升序排列 object_desc。但是,此查詢會產生有關使用臨時表和檔案排序的警告。

當查詢包含與 GROUP BY 子句不同的 ORDER BY 子句時,或從除連接中的第一個。在這種情況下,排序是基於計算欄位的,因此無法使用索引,因此使用檔案排序。

要解決此問題,請刪除 leo.object_desc 的 ORDER BY 子句。這將消除對臨時表和文件排序的需要,從而提高查詢效能:

<code class="sql">EXPLAIN SELECT 
            el.object_id, 
            leo.object_desc, 
            COUNT(el.object_id) as count_rows
        FROM 
            event_log el 
            LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id
        GROUP BY 
            el.object_id
        ORDER BY 
            count_rows DESC;</code>

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

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