Mysql

如何判斷索引是否用於在 MySQL 中進行排序?

  • May 30, 2021

我有一個帶有 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的,實際使用的。

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