Mysql
為什麼表 A 上的 GROUP BY 會導致表 B 上“使用臨時;使用文件排序”?
給定以下人為的範常式式碼:
SELECT A.author_name , COUNT(T.title) AS num_titles FROM authors A JOIN titles T ON T.authorFK = A.authorPK GROUP BY A.authorPK
在
explain
列旁邊的表格中Extra
顯示。Using temporary; Using filesort``titles
如果我刪除
COUNT
和GROUP BY
, Extra 現在是空白的。這顯然是一個人為的簡單範例;我可以給出一個更真實的程式碼範例,但我希望有人知道我在說什麼,並且可以基於此教育我。謝謝!
使用目前版本的 MariaDB。
- “使用臨時;使用文件排序”通常放在解釋的第一行,無論哪個表需要它們。
- 可能有不止一種“排序”。用於
EXPLAIN FORMAT=JSON SELECT ...
獲取此類詳細資訊。- “filesort”中的“file”並不一定意味著排序是在磁碟上完成的。如果可能,它實際上是在 RAM 中完成的。
COUNT(T.title)
可能會被替換COUNT(*)
並獲得相同的結果,而無需檢查title
是否為非 NULL。- 如果作者可能有零個標題,您將不會從查詢中看到 - 該作者將沒有行。
LEFT JOIN
(參照:)