索引的顺序是否重要?

时间:2013-10-10 20:28:03

标签: mysql sql

假设您有一个包含A列和B列的表格。您在表上创建多列索引(A,B)。

您的查询是否必须考虑索引的顺序?例如,

select * from MyTable where B=? and A in (?, ?, ?);

在查询中我们将B放在第一位和第二位。但指数是(A,B)。订单是否重要?

更新:我知道根据最左边的前缀规则,索引的顺序非常重要 。但是,在查询本身中哪个列首先出现是否重要?

3 个答案:

答案 0 :(得分:2)

在这种情况下没有,但我建议使用EXPLAIN关键字,您将看到My​​SQL将使用(或不使用)哪些优化。

答案 1 :(得分:2)

索引中列的顺序可能会影响MySQL优化器使用索引的方式。具体来说,MySQL可以使用复合索引对列A进行查询,因为它是复合索引的第一部分。

但是,您的问题是指查询中列引用的顺序。在这里,优化器将适当地处理引用,并且顺序并不重要。不同的子句必须按特定的顺序排列才能满足语法规则,因此无论如何都无法控制。

关于多列索引优化的Mysql参考是here

答案 2 :(得分:1)

您可以测试您认为它们存在问题的特定查询,但我不会担心这种优化。您的查询很可能会被查询计划从其原始格式中删除。也就是说MySQL应该很好地规划如何使用索引来优化速度。这可能要求条件处于不同的顺序,但我对此表示怀疑。如果MySQL实际上必须重新排序优化条件,那么相对于查询的执行,这将是一个非常小的成本(至少如果结果集很大)。