mySql单列索引与联合索引的区别
引自https://my.oschina.net/857359351/blog/658668
第一张表gift和索引为联合索引,如图:
第二张表gift2为单列索引,如图:
下面开始进行测试:
相同的SQL分别查询两张表,使用EXPLAIN解析一下SQL
select * from gift where name = '道具' and scene_type=1;
select * from gift2 where name=‘道具’ and scene_type=1;
显示的结果为两条SQL都会使用到索引,这我就不上图了。
然后只查询其中的某列,但是这个列已经创建索引
select name,status from gift where name = '道具' and scene_type=1;
select name,status from gift2 where name=‘道具’ and scene_type=1;
显示的结果为两条SQL也都使用了索引。
继续查询没有创建索引的列,这里rank字段并没有创建索引
select name,status,rank from gift where name = '道具' and scene_type=1;
select name,status,rank from gift2 where name=‘道具’ and scene_type=1;
显示的结果为两条SQL也都使用了索引。
接下来把SQL调整一下,name字段都建立了索引,下面把where条件里的name条件去掉
select name,status from gift where scene_type=1;
select name,status from gift2 where scene_type=1;
显示的结果为两条SQL也都使用了索引。
select name,status,rank from gift where scene_type=1;
select name,status,rank from gift2 where scene_type=1;
第一条SQL根本没有用到索引,第二条SQL还和以前一样,同样使用到了索引。
其实在联合索引上会有一个mysql索引最左匹配原则,但是如果联合索引的第一个列不在where条件语句中,并且所查询的列其中有的是没有建立索引的,那么这个联合索引就是无效的,具体为什么会这样我也还没有整明白(囧),不过以后再写SQL也会注意一下这方面的问题,而且公司DBA也建议如果使用联合索引,那么where条件也要尽量根据联合索引的顺序来,如果不按照顺序来,索引也同样会用到,但是在执行前,SQL优化器也会将条件调整为联合索引的顺序,既然可以直接避免这种情况,就没必要再让SQL优化器去处理,毕竟处理也是有开销的。
最新文章
- PHP7函数大全(4553个函数)
- Spring MVC 拦截 js,css,png 等资源
- 【Bootstrap基础学习】02 Bootstrap的布局组件应用示例
- CTabCtrl的使用
- 3月31日学习笔记(CSS基础)
- Android注解使用之Dagger2实现项目依赖关系解耦
- 4.VUEX到底是什么
- java 数字左补齐0
- 《PyQt5快速开发与实战了》正式发售 !!!
- Linux文件打包与解压缩
- python 导入模块出错 ImportError: No module named 'request'
- 20175330 实验一 《Java开发环境的熟悉》实验报告
- DNS隧道 iodns
- redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法
- qperf测量网络带宽和延迟
- 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
- linux小白
- 【无图慎入】Link Cut Tree 总结
- updatepanel 和 visibility 有一定冲突
- 1、类、封装(私有private、this关键字)
热门文章
- Shell脚本中的并发(转)
- Linux(centos7)上安装最新版R3.4.1
- 可访问范围 与 visual 或 abstract “修饰符”
- p2751 Job Processing
- Flutter学习之路---------第一个Flutter项目
- android -------- Data Binding的使用(一)
- 发布web站点数据库环境的问题
- Vue.js,select中的option用ajax想循环控制值的显示 v-model可以实现但提示报错,这是为什么?
- php二分法查找
- 漏洞复现——bash远程解析命令执行漏洞