如何判断索引是否用于在 MySQL 中进行排序?

Chr*_*per 11 mysql index sorting

我有一个带有 ORDER BY 子句的查询,它使用一个列,该列是 WHERE 子句中使用的索引上的最后一列,基本上是以下形式:

SELECT
  cols
FROM
  tables
WHERE
  col_1 = x
  AND col_2 = y
  AND col_3 = z
ORDER BY col_4
Run Code Online (Sandbox Code Playgroud)

并按该顺序在列(col_1、col_2、col_3、col_4)上创建索引。

当我分析查询时,超过 99% 的时间都花费在“排序结果”状态。col_4 是一个时间戳列,如果这有什么区别的话。我知道 ORDER BY 只能在某些情况下使用索引,但我仍然有点不明白优化器何时会这样做。

Mah*_*til 13

您应该EXPLAIN EXTENDED在查询之前附加并自己查看结果。

它应该有一个条目

  • 可能的密钥

如果此列为 NULL,则没有相关索引。在这种情况下,您可以通过检查 WHERE 子句来检查它是否引用了适合编制索引的某些列或多列,从而提高查询的性能。

  • 钥匙

key 列表示 MySQL 实际决定使用的键(索引)。如果 MySQL 决定使用 possible_keys 索引之一来查找行,则该索引被列为键值。

有关更多信息,您可以参考此说明输出说明 join_types