假设您有一个表,其中有A和B列。在表上创建多列索引(A,B)。
您的查询是否必须考虑索引的顺序?例如,
select * from MyTable where B=? and A in (?, ?, ?);在查询中我们将B放在第一位,第二位放在第二位。但指数是(A,B)。命令重要吗?
Update:我确实知道,从最左边的前缀规则来看,索引的顺序非常重要。但是,哪一列在查询本身中排在第一位重要吗?
发布于 2013-10-10 20:32:46
在本例中,不是,但我建议使用解释关键字,您将看到MySQL将使用哪些优化(或不使用)。
发布于 2013-10-10 20:37:48
索引中列的顺序会影响MySQL优化器使用索引的方式。具体来说,MySQL可以将复合索引用于A列的查询,因为它是复合索引的第一部分。
但是,您的问题涉及查询中列引用的顺序。在这里,优化器将适当地处理引用,并且顺序并不重要。不同的子句必须按照特定的顺序来满足语法规则,所以无论如何您都没有什么控制权。
多列索引优化的Mysql引用是这里。
发布于 2013-10-10 20:32:20
您可以测试特定的查询,您认为它们是问题,但否则我不会担心这个优化。查询计划很可能会破坏查询的原始形式。也就是说,MySQL应该很好地规划如何使用指数来优化速度。这可能要求条件不同,但我对此表示怀疑。如果MySQL确实需要重新排序优化条件,那么相对于查询的执行而言,这将是一个非常小的代价(至少如果结果集很大)。
https://stackoverflow.com/questions/19305592
复制相似问题