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