引自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优化器去处理,毕竟处理也是有开销的。

最新文章

  1. PHP7函数大全(4553个函数)
  2. Spring MVC 拦截 js,css,png 等资源
  3. 【Bootstrap基础学习】02 Bootstrap的布局组件应用示例
  4. CTabCtrl的使用
  5. 3月31日学习笔记(CSS基础)
  6. Android注解使用之Dagger2实现项目依赖关系解耦
  7. 4.VUEX到底是什么
  8. java 数字左补齐0
  9. 《PyQt5快速开发与实战了》正式发售 !!!
  10. Linux文件打包与解压缩
  11. python 导入模块出错 ImportError: No module named 'request'
  12. 20175330 实验一 《Java开发环境的熟悉》实验报告
  13. DNS隧道 iodns
  14. redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法
  15. qperf测量网络带宽和延迟
  16. 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
  17. linux小白
  18. 【无图慎入】Link Cut Tree 总结
  19. updatepanel 和 visibility 有一定冲突
  20. 1、类、封装(私有private、this关键字)

热门文章

  1. Shell脚本中的并发(转)
  2. Linux(centos7)上安装最新版R3.4.1
  3. 可访问范围 与 visual 或 abstract “修饰符”
  4. p2751 Job Processing
  5. Flutter学习之路---------第一个Flutter项目
  6. android -------- Data Binding的使用(一)
  7. 发布web站点数据库环境的问题
  8. Vue.js,select中的option用ajax想循环控制值的显示 v-model可以实现但提示报错,这是为什么?
  9. php二分法查找
  10. 漏洞复现——bash远程解析命令执行漏洞