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