【发布时间】:2021-12-17 14:53:54
【问题描述】:
当我在学习如何使索引在 MySQL 中表现更好时,我看到了一个例子:
如果您像这样创建连接索引:(col1,col2);并且您的查询是这样的:从 col1 = 'col1' order by col2 的表中选择 col3。引擎不会使用连接索引对数据进行排序。您应该排序如下: select col3 from table where col1 = 'col1' order by col1,col2;
但我对上面的例子感到困惑:如果我创建 (col1,col2) ,这意味着 B + 树将首先按 col1 排序索引,当 col1 相同时,它会考虑 col2。
所以在这个查询中我们有 col1 = 'col1',所以我认为引擎只是通过连接索引顺序获取数据,然后数据自然会按 col2 排序。
我错了还是这个例子错了?也希望有人能推荐一篇关于如何更好地使用索引的文章,而不是教什么是索引以及如何添加索引,
【问题讨论】:
-
一切都比描述的复杂。请参阅dbfiddle.uk/…(甚至这个小提琴也没有涵盖所有可能的情况)。完整的解释太长了。研究执行计划的构建和优化。
-
好的,我会认真看链接的,谢谢。
-
在那个 dbfiddle... 前两个解释是相同的,但这并不能证明它们将具有相同的速度。 (解释不够详细。)其余大部分查询涉及 Where 或 Order by 中的两个“范围”;在大多数情况下,这会破坏索引的有效使用。