1.联合索引失效的条件

联合索引又叫复合索引。两个或更多个列上的索引被称作复合索引。

对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

如:建立 姓名、年龄、性别的复合索引。

create table myTest(

a int,

b int,

c int,

KEY a(a,b,c)

);

(1)    select * from myTest  where a=3 and b=5 and c=4;   ----  abc顺序

abc三个索引都在where条件里面用到了,而且都发挥了作用

(2)    select * from myTest  where  c=4 and b=6 and a=3;

where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样

(3)    select * from myTest  where a=3 and c=7;

a用到索引,b没有用,所以c是没有用到索引效果的

(4)    select * from myTest  where a=3 and b>7 and c=3;     ---- b范围值,断点,阻塞了c的索引

a用到了,b也用到了,c没有用到,这个地方b是范围值,也算断点,只不过自身用到了索引

(5)    select * from myTest  where b=3 and c=4; --- 联合索引必须按照顺序使用,并且需要全部使用

因为a索引没有使用,所以这里 bc都没有用上索引效果

(6)    select * from myTest  where a>4 and b=7 and c=9;

a用到了  b没有使用,c没有使用

(7)    select * from myTest  where a=3 order by b;

a用到了索引,b在结果排序中也用到了索引的效果,a下面任意一段的b是排好序的

(8)    select * from myTest  where a=3 order by c;

a用到了索引,但是这个地方c没有发挥排序效果,因为中间断点了,使用 explain 可以看到 filesort

(9)    select * from mytable where b=3 order by a;

b没有用到索引,排序中a也没有发挥索引效果

2.索引失效的条件

不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

存储引擎不能使用索引范围条件右边的列

尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

is null,is not null也无法使用索引  ----  此处存在疑问,经测试确实可以使用,ref和const等级,并不是all

like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作。问题:解决like‘%字符串%’时索引不被使用的方法?

字符串不加单引号索引失效

SELECT * from staffs where name='2000';  -- 因为mysql会在底层对其进行隐式的类型转换

SELECT * from staffs where name=2000;  --- 未使用索引

一般性建议

对于单键索引,尽量选择针对当前query过滤性更好的索引

在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。

在选择组合索引的时候,尽量选择可以能够包含当前query中的where子句中更多字段的索引

尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的

mysql联合索失效_mysql 联合索引生效的条件、索引失效的条件相关推荐

  1. mysql联合索失效_mysql联合索引注意事项,解决为啥联合索引无效的问题

    在数据查询的时候合理利用索引才更好地提高查询效率.今天遇到一个数据量不算太大(1000万左右)的表,但是查询特别慢,建立了userid,logtype,fromid 发现索引无效,查阅相关资料后发现联 ...

  2. mysql 配置执行计划_MySQL深入学习(二)--配置、索引、执行计划

    MySQL 一.MySQL 5.7 初始化配置 1.初始化数据并配置 # 1.初始化数据 /usr/local/mysql/bin/mysqld --initialize-insecure --use ...

  3. mysql联合union查询_Mysql联合查询UNION和UNION ALL的使用介绍

    数据库 Mysql联合查询UNION和UNION ALL的使用介绍 字号+ 作者:小虾米 2016-12-05 12:47 Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意 ...

  4. mysql union详解_MySQL 联合查询union详解-Fun言

    一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行. UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须 ...

  5. mysql 子查询分页_MySQL子查询,正则表达式,索引,分页,三大范式

    子查询 可以将子查询放在许多的 SQL 子句中,包括: • WHERE 子句• HAVING 子句 • FROM 子句 使用子查询的原则 • 子查询放在圆括号中. • 将子查询放在比较条件的右边. • ...

  6. mysql外部关联视图_MySQL数据库 : 自关联,视图,事物,索引

    自关联查询(自身id关联自身id(主键),查询的时候可以逻辑分为两个表,然后分别起一个别名来区分) select * from areas as city inner join areas as pr ...

  7. mysql 联合索 B 树_MySQL 索引与 B+ 树

    MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的.在介绍 B+ 树以前,先认识一下什么是 B 树,B 树是平衡二叉树,与一般的二叉查找树不同,平衡 ...

  8. asp.net怎么实现按条件查询_【33期】分别谈谈联合索引生效和失效的条件

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 这道题考 ...

  9. 联合索引会创建几个索引_【1033期】分别谈谈联合索引生效和失效的条件

    这道题考查索引生效条件.失效条件.像这类问题才其实很有意义,建议各位以后面试其他伙伴的时候,多侧重这类问题的提问,比考察一般概念性的问题好多了. 能大概考察应聘者对写的程序是有注重做优化,提高代码质量 ...

最新文章

  1. mysql 一键安装 linux_linux下mysql8 shell脚本一键安装
  2. php扩展-ioncube组件的安装方法_Windows系统PHPStudy Web环境安装ionCube扩展软件
  3. 《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了
  4. 年轻人,莫把技术当全部
  5. mvc ajax返回整个页面跳转,在springmvc中的ajax发布调用之后,有什么方法可以将我的页面(jsp)重定向到另一个页面(jsp)...
  6. spark基础之基于yarn两种提交模式分析
  7. oracle数据库同步异步优劣点,ORACLE数据库异步IO介绍
  8. 微软1月补丁星期二值得关注的蠕虫及其它
  9. 2、Jupyter Notebook 快速入门
  10. HCIE-RS面试--STP弊端
  11. 软件众包,哪个数据库好
  12. adb命令 关机与重启
  13. PE制作实录 —— 定义我的 PE 工具箱
  14. ABAQUS常用量纲
  15. RV减速器静力学和动力学仿真分析
  16. 如何从零配置腾讯云cdn加速服务?
  17. 直播场景音频降噪,传统算法 VS AI 算法对比和实践
  18. 明星的html模板,明星个人网页制作模板
  19. YDLIDAR G4雷达的unity使用相关+北阳雷达
  20. 今天搞毕设了么?——3.29 audioread读取音频文件

热门文章

  1. java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...
  2. 如何在服务器上使用matlab
  3. leetcode437. 路径总和 III
  4. 关于vc++调用 exe文件的问题
  5. endnote参考文献排版_高效管理论文参考文献的方法
  6. 想成为编程高手,从基础做起
  7. 【10天基于STM32F401RET6智能锁项目实战第4天】外部中断的按键实现语音控制
  8. Super VLAN
  9. SQL注入之错误注入_基于updatexml()
  10. 关于ISA2006引起网速慢或间歇性断网的问题的解决方法