mysql数据库索引建立
mysql建立的索引是有先后顺序之分的。
查询语句:SELECT * FROM `table` `f` WHERE `f`.`iStatus` = 1 AND `f`.`iYxqTime` > 1541557486 AND `f`.`iXinxiType` = 1 AND `f`.`iFangType2` = 4 AND f.iXiaoqu=1
1、iYxqTime,iXinxiType,iFangType2
这样的话该语句会用到iYxqTime这个索引,但是又由于该表达式为不等式,所以后面的字段是无法匹配到索引。如果iYxqTime需要扫描的行数比较多的话,查询速度就会比较慢。
2、iXinxiType,iYxqTime,iFangType2
这样的话sql语句会自动优化,首先会去匹配iXinxiType,然后iYxqTime。但是iFangType2就无法用到。因为iYxqTime是不等式
3、iXinxiType,iFangType2,iYxqTime
这样的话这三个字段都会用到索引,比较理想。
4、iXiaoqu,iFangType2,iXinxiType,iStatus,iYxqTime
如果设计成这样,那么是最有的情况,还有顺序iXiaoqu最先,是因为iXiaoqu这个字段变化比较大,类似iStatus这种状态值一般也就0,1,2。可以排到最后面或者不加入进来,但是如果这边不加入进来的话iYxqTime就用不到索引了。
如果:索引A,B,C,D。A,B,C,D排序方式复杂度高的放前面,不等式放后面。
SQL中的where条件会根据索引自动排序优化,不需要考虑位置关系
SQL语句where条件:B,C,D是无法使用索引
SQL语句where条件:A,C,D或者C,A,D。只有A能使用索引
SQL语句where条件:A,B,D。只有A,B能使用索引
SQL语句where条件:A,B,D。如果A为不等式,只有A能使用索引
SQL语句where条件:A,B,C,D。如果C为不等式,只有A,B,C能使用索引