最近看了一本MYSQL优化的书,书上说where条件前后顺序会导致索引无法使用?MMP 啥意思呢?
意思说 比如说 建了个组合索引 CREATE INDEX IX_A_B ON t(a,b);
SELECT * FROM T WHERE B=1 AND A=2;
这样的语句使用不上IX_A_B,因为条件WHERE顺序不匹配!
记得以前面试被问过ORACLE WHERE 条件顺序如何? 我很蒙蔽啊!什么鬼问题?
现在才明白当初的面试官是从MYSQL过来的!!
那我们做下测试,只从MYSQL被O收走了后,出了8.0 还添加了跳跃索引扫描。这些ORACLE数据库老早使用的技术了!
看看这个不友好的WHERE条件顺序的限制是否还存在! 拿5.7来看看!
mysql> desc T_Dire_Info;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| DirectoryNumber | varchar(36) | NO | PRI | NULL | |
| Name | varchar(50) | YES | | NULL | |
| IdNo | varchar(30) | YES | | NULL | |
| FileDirectory | varchar(200) | YES | | NULL | |
| PageCount | int(11) | YES | | NULL | |
| PosPage | varchar(50) | YES | | NULL | |
| PosX | varchar(500) | YES | | NULL | |
| PosY | varchar(500) | YES | | NULL | |
| CreateDate | datetime | YES | | NULL | |
| UpdateDate | datetime | YES | | NULL | |
| ImagePath | varchar(500) | YES | | NULL | |
| FileDirectoryDst | varchar(200) | YES | | NULL | |
| FileDirectoryFinal | varchar(200) | YES | | NULL | |