我試圖簡化一個查詢來找出爲什麼它在生產服務器上如此之慢。這個想法是抓住X最近的條目分頁。問題是,MySQL的優化器似乎想要使用filesort而不是主鍵(ID
)。剝離掉所有多餘的東西,下面的作品需要,使用索引(主):當在SELECT中存在多個字段時,mysql ORDER BY沒有使用索引
EXPLAIN SELECT ID FROM table ORDER BY ID DESC
然而,這些變化訴諸文件排序:
EXPLAIN SELECT ID, field2 FROM table ORDER BY ID DESC
EXPLAIN SELECT * FROM table ORDER BY ID DESC
我需要返回的幾個字段,所以還是不行...我能找到解決這個問題的簡單查詢有:
EXPLAIN SELECT * FROM table FORCE INDEX (Primary) ORDER BY ID DESC
,但我還沒有想出如何工作是到大的查詢與表連接。我錯過了很簡單的事情嗎?
強迫使用索引加快查詢?如果您需要閱讀表格的所有記錄(因爲它看起來像你),也許使用索引是沒有意義的。 「這個想法是抓住X最近的分頁條目」。那麼在某處應該有LIMIT子句。否則數據庫認爲你想要他們全部。 – Thilo 2012-02-21 04:05:28
對不起,我沒有提到LIMIT子句,因爲這是我爲上述示例剝離的一部分。使用LIMIT似乎沒有任何作用 - 它仍然每次都使用filesort。我沒有讓它運行生產服務器上的FORCE INDEX速度測試;那只是通過EXPLAIN測試的。 – overflowing 2012-02-21 04:15:34