MySQL是否会根据多列索引顺序在条件重新排序?

时间:2019-01-11 02:05:33

标签: mysql database

例如,索引为(column1,column2)。假设我们运行查询select * from some_table where column2 > 3 and column1<2,MySQL是否足够聪明,可以将查询重新排序为select * from some_table where column1<2 and column2 > 3,然后使用索引(column1,column2)

1 个答案:

答案 0 :(得分:0)

是的,MySQL的优化器可以判断布尔值AND是代数可交换的,也就是说,A AND B在逻辑上与B AND A相同。

它可以在保持逻辑等价的同时对词序进行重新排序以匹配索引顺序。

但是,在您显示的情况下,column1上的条件是范围条件,因此MySQL无法使用索引在第二列中进行搜索。 column2中的值是按column1的值排序的,因此它们实际上没有顺序。搜索行,column2 > 3无论如何都必须搜索与第一个术语匹配的行的每个子集,到那时,存储引擎会将这些行读入内存,因此使用索引几乎没有价值。 / p>