1.什么是索引 索引是一种数据结构,会对添加索引的字段的值进行排序存放,提高查询效率;一张表中可以添加多个索引;innodb存储引擎默认使用的是b+tree索引结构,也支持哈希、全文索引。 2.索引的优缺点 2.1索引的优点 ①提高数据库查询效率 ②减少锁等待和死锁的产生(行锁是基于索引创建的) ③ ...
分类:
数据库 时间:
2021-06-25 16:54:11
阅读次数:
0
1.前导模糊查询不能利用索引(like '%XX'或者like '%XX%') 假如有这样一列code的值为'AAA','AAB','BAA','BAB' ,如果where code like '%AB'条件,由于前面是 模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索 ...
分类:
数据库 时间:
2021-01-11 10:45:02
阅读次数:
0
1.对过滤字段进行了函数处理 对字段做了函数计算,就用不上索引了 比如对时间类型的处理 select month(now()) 2.发生了字段类型的隐式转换 尤其在存数据期时一定要注意,为数值类型 过滤值为字符型--走索引 过滤值为数值型--字段的vachar发生隐式转换 相当于执行了函数 cast ...
分类:
数据库 时间:
2020-09-17 13:25:44
阅读次数:
27
背景 最近生产爆出一条慢sql,原因是用了or和!=,导致索引失效。于是,总结了索引失效的十大杂症,希望对大家有帮助,加油。 一、查询条件包含or,可能导致索引失效 新建一个user表,它有一个普通索引userId,结构如下: CREATE TABLE `user` ( `id` int(11) N ...
分类:
数据库 时间:
2020-07-04 15:32:38
阅读次数:
79
全列匹配 最佳左前缀法则 不在索引列上做任何操作(计算、函数、自动、手动类型转换),会导致索引失效 存储引擎不能使用索引中范围条件右边的列 尽量使用覆盖索引(只访问索引的查询(索引和查询列一致)),少用:select * mysql 再使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描 is ...
分类:
数据库 时间:
2020-06-14 23:39:26
阅读次数:
75
索引失效的案例: 1、全值匹配我最爱 建立几个复合索引字段,最好就用上几个字段。且按照顺序使用 2、最佳左前缀法则 如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始,不跳过索引中间的列。(带头大哥不能死,中间兄弟不能丢) 3、不再索引列上做任何操作(计算、函数、(自动or手动)类型 ...
分类:
数据库 时间:
2020-04-12 23:09:10
阅读次数:
157
例如:一张USER表 有字段属性 name,age 其中name为索引 下面列举几个索引失效的情况 1. select * from USER where name=‘xzz’ or age=16; 例如这种情况:当语句中带有or的时候 即使有索引也会失效。 2.select * from USER ...
分类:
数据库 时间:
2019-09-26 19:56:28
阅读次数:
113
Google了很多“MySQL索引失效”的文章,写的都很杂乱,于是自己综合了几篇文章,整理了一下。 参考资料: https://www.jianshu.com/p/932bcdf2c89f https://blog.csdn.net/u010796790/article/details/521948 ...
分类:
数据库 时间:
2018-11-25 17:43:14
阅读次数:
162
1、情况总结: 2、如何解决like %XXX,或者like %XXX%时索引失效的问题。 使用覆盖索引解决索引失效的问题 3、索引使用情况 4、口诀 ...
分类:
数据库 时间:
2018-10-14 16:22:45
阅读次数:
156
1.索引不存储null值 更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引,只能全表扫描。 为什么索引列不能存Null值? 将索引列值进行建树,其中必然涉及到诸多的比较操作。N ...
分类:
数据库 时间:
2018-03-18 13:58:16
阅读次数:
185