mysql数据库索引建立

hykeda6年前Mysql324

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,iFangType2iYxqTime

这样的话这三个字段都会用到索引,比较理想。

4、iXiaoqu,iFangType2iXinxiTypeiStatusiYxqTime

如果设计成这样,那么是最有的情况,还有顺序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能使用索引




标签: Mysql索引

相关文章

sqlmap数据库注入

get方式注入:sqlmap.py -u "https://www.abc.com?a=111&w=111" -batchpost方法注入:sqlmap.py -u &qu...

mysql数据库查看进程数

mysql数据库查看进程数

查看当前正在运行的mysql线程 show processlist (默认查看前100条) show full processlist (查看所有线程)...

MySQL索引原理及慢查询优化

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。