Mysql

為什麼表 A 上的 GROUP BY 會導致表 B 上“使用臨時;使用文件排序”?

  • August 9, 2021

給定以下人為的範常式式碼:

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

如果我刪除COUNTGROUP BY, Extra 現在是空白的。

這顯然是一個人為的簡單範例;我可以給出一個更真實的程式碼範例,但我希望有人知道我在說什麼,並且可以基於此教育我。謝謝!

使用目前版本的 MariaDB。

  • “使用臨時;使用文件排序”通常放在解釋的第一行,無論哪個表需要它們。
  • 可能有不止一種“排序”。用於EXPLAIN FORMAT=JSON SELECT ...獲取此類詳細資訊。
  • “filesort”中的“file”並不一定意味著排序是在磁碟上完成的。如果可能,它實際上是在 RAM 中完成的。
  • COUNT(T.title)可能會被替換COUNT(*)並獲得相同的結果,而無需檢查title是否為非 NULL。
  • 如果作者可能有零個標題,您將不會從查詢中看到 - 該作者將沒有行。LEFT JOIN(參照:)

引用自:https://dba.stackexchange.com/questions/297780