MySQL没有为ORDER BY使用索引

时间:2019-05-28 14:21:57

标签: mysql sql

我在(column_1, column_2, column_3)上有索引,并且在运行此查询时

SELECT * FROM table ORDER BY column_1 DESC, column_2 ASC, column_3 ASC

不使用该索引。

我需要使用该索引,因为当我仅使用ORDER BY column_1 DESC(大约0.0005秒)和ORDER BY column_1 DESC, column_2 ASC, column_3 ASC(大约0.4秒)时,查询时间存在很大差异。

此外,ORDER BY column_1 DESC中甚至没有使用该索引。

这是EXPLAIN的{​​{1}},仅ORDER BY column_1 DESC, column_2 ASC, column_3 ASC相同:

enter image description here

有没有使用索引的原因吗?

1 个答案:

答案 0 :(得分:2)

您的索引定义需要匹配您要查询的排序顺序,或者至少匹配混合的排序方向(即DESCASCASC或{{1 }},ASCDESC)。 ORDER BY文档说:

  

如果查询将ASC和DESC混合使用,则优化器可以在列上使用索引,如果该索引还使用了相应的升序和降序混合列。 [...]如果key_part1下降而key_part2上升,则优化器可以在(key_part1,key_part2)上使用索引。如果key_part1递增而key_part2递减,它也可以在这些列上使用索引(向后扫描)。

有关更多信息,请参见here