當我做我的查詢的解釋擺脫的「使用臨時;使用文件排序」
我看到它的「使用臨時;使用文件排序」下的「額外」的第一行。我知道這很糟糕,但我不知道它究竟意味着什麼或如何解決它。
如果你想看到我的查詢,這裏有一個更普遍的問題,我問相同的查詢:MySQL query optimization and EXPLAIN for a noob。 作爲參考,查詢涉及24個表和23個連接。
我的問題,現在:
- 什麼是「使用臨時」和「使用文件排序」是什麼意思?
- 假設他們是壞人,我該如何擺脫他們?
當我做我的查詢的解釋擺脫的「使用臨時;使用文件排序」
我看到它的「使用臨時;使用文件排序」下的「額外」的第一行。我知道這很糟糕,但我不知道它究竟意味着什麼或如何解決它。
如果你想看到我的查詢,這裏有一個更普遍的問題,我問相同的查詢:MySQL query optimization and EXPLAIN for a noob。 作爲參考,查詢涉及24個表和23個連接。
我的問題,現在:
如前所述,「使用filesort」和「using temporary」並不總是意味着糟糕的性能。
Here是提高ORDER的表現BY語句一些基本準則。亮點:
如果您想提高ORDER BY速度,請檢查您是否可以讓MySQL使用索引而不是額外的排序階段。如果這不可行,您可以嘗試以下策略:
增加 sort_buffer_size變量的大小。
增長的 read_rnd_buffer_size變量的大小。通過聲明列只有那麼大,他們需要持有其中存儲的值每行
使用較少的內存。例如,如果值不超過16個字符,則CHAR(16)優於CHAR(200)。
首先嚐試使用索引(確保您通過索引排序的字段)。請注意,增加系統變量sort_buffer_size和read_rnd_buffer_size也會對其他查詢產生負面影響 - 可以考慮將它們專門設置爲您需要的會話,並將其保留爲所有其他會話的默認會話。
我認爲這意味着「查詢優化器不能使用表中的索引來檢索最終順序中的數據;結果集對於內存來說可能太大;因此,中間結果將存儲在一個文件,然後排序「。當DBMS使用臨時文件並對它們進行排序時,它並不會自動壞;它可能是回答查詢的最佳方法(優化器認爲它是)。 – 2011-02-08 16:22:53