Mysql
如何判斷索引是否用於在 MySQL 中進行排序?
我有一個帶有 ORDER BY 子句的查詢,它使用一個列,該列是 WHERE 子句中使用的索引上的最後一列,基本上是以下形式:
SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4
並按該順序在列 (col_1, col_2, col_3, col_4) 上創建索引。
當我分析查詢時,超過 99% 的時間都處於“排序結果”狀態。col_4 是一個時間戳列,如果這有什麼不同的話。我知道 ORDER BY 只能在某些情況下使用索引,但是對於優化器何時會這樣做,我仍然有些困惑。
您應該在查詢之前追加
EXPLAIN EXTENDED
並自己查看結果。它應該有一個條目
- 可能的鍵
如果此列為 NULL,則沒有相關索引。在這種情況下,您可以通過檢查 WHERE 子句來檢查它是否引用了適合索引的某些列或列,從而提高查詢的性能。
和
- 鑰匙
key 列表示 MySQL 實際決定使用的鍵(索引)。如果 MySQL 決定使用 possible_keys 索引之一來查找行,則該索引被列為鍵值。
有關更多資訊,您可以參考這個解釋輸出和解釋 join_types
您
EXPLAIN
在查詢中使用 (explain select-or-whatever-your-query-is
)。
possible_keys
顯示可以使用key
的,實際使用的。