mysql - MySQL会根据多列索引顺序重新排序where条件吗?

标签 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)

最佳答案

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

它可以在保留逻辑等效性的同时对术语进行重新排序以匹配索引顺序。

但是,在您显示的情况下,column1 上的条件是范围条件,因此 MySQL 无法使用索引在第二列中进行搜索。 column2 中的值按照 column1 的值进行排序,因此它们实际上没有顺序。搜索 column2 > 3 的行必须搜索与第一项匹配的行的每个子集,到那时,存储引擎会将这些行读入内存,因此没有什么值(value)使用索引。

关于mysql - MySQL会根据多列索引顺序重新排序where条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139436/

相关文章:

mysql - 多列主键的 MySQL KEY 值(在 desc 表中)是多少?

database - DB2 实例是否与数据库实例相同?

mysql - SQL如何连接这些表

mysql - DB故障后如何恢复InnoDB?

mysql - 可以通过一个查询引用两个特定的表

mysql - 一种编写具有重复列名的 MySql 查询的有效方法

MySQL 5.5 - 如何在插入期间表被锁定时获取行数

mysql - SAP 数据服务导出到 MySQL 的速度缓慢

php - 如何在一个查询中执行插入操作?

数据库设计: accounts with multi currency