假设您有一个包含A列和B列的表格。您在表上创建多列索引(A,B)。
您的查询是否必须考虑索引的顺序?例如,
select * from MyTable where B=? and A in (?, ?, ?);
在查询中我们将B放在第一位和第二位。但指数是(A,B)。订单是否重要?
更新:我知道根据最左边的前缀规则,索引的顺序非常重要 。但是,在查询本身中哪个列首先出现是否重要?
答案 0 :(得分:2)
在这种情况下没有,但我建议使用EXPLAIN关键字,您将看到MySQL将使用(或不使用)哪些优化。
答案 1 :(得分:2)
索引中列的顺序可能会影响MySQL优化器使用索引的方式。具体来说,MySQL可以使用复合索引对列A进行查询,因为它是复合索引的第一部分。
但是,您的问题是指查询中列引用的顺序。在这里,优化器将适当地处理引用,并且顺序并不重要。不同的子句必须按特定的顺序排列才能满足语法规则,因此无论如何都无法控制。
关于多列索引优化的Mysql参考是here
答案 2 :(得分:1)
您可以测试您认为它们存在问题的特定查询,但我不会担心这种优化。您的查询很可能会被查询计划从其原始格式中删除。也就是说MySQL应该很好地规划如何使用索引来优化速度。这可能要求条件处于不同的顺序,但我对此表示怀疑。如果MySQL实际上必须重新排序优化条件,那么相对于查询的执行,这将是一个非常小的成本(至少如果结果集很大)。