MySql学习笔记(九):索引失效
2019-04-14 21:55
344 查看
数据准备:
CREATE TABLE `t_blog` ( `id` int(11) NOT NULL auto_increment, `title` varchar(50) default NULL, `typeId` int(11) default NULL, `a` int(11) default '0', PRIMARY KEY (`id`), KEY `index_1` USING BTREE (`title`,`typeId`,`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1、复合索引丢失第一列字段:
2、复合索引,跳过中间字段:
先来看查询条件只有第一列时的结果:
接下来执行跳过中间字段的情况:
此时索引确实生效,但key_len依旧是153,理论上查询精度越大key_len会越大,但此时并没有增大就表示条件【a='123'】上的索引并没有用到。
复合索引应当遵守【最左前列原则】,即:查询应该从索引的最左前列开始并且不能跳过中间列,一旦跳过某个列,该列之后的列上的索引都会失效
3、在索引上进行计算、函数、类型转换等操作导致索引失效:
使用函数:
进行自动类型转换,title定义的是varchar类型,但查询时给他赋值int导致mysql会自动给他进行类型转换导致索引失效
使用 + - * / 等计算
4、使用了范围导致该索引之后的索引失效
先来看一下没使用范围的sql执行情况:
随着查询精度的增大,key_len增大,表示两个条件的索引均有效,现在在范围之后再添加一个查询条件:
key_len依旧保持158,说明票【a=1】这个条件上的索引是失效的。
5、使用不等于操作(!= 或 <>)
6、使用 is not null
7、使用前导模糊查询
先来看后导查询:
此时索引并没有失效,再来看前后导模糊查询:
此时索引已经失效,那么单独使用前导查询:
此时索引失效,因此,使用前导查询会导致索引失效。
8、mysql不走索引会有更好的查询性能时索引失效
相关文章推荐
- MySQL学习笔记4(索引)
- mysql索引学习总结笔记
- mysql索引的学习笔记
- 学习笔记--mysql索引(四) 多列索引
- MySQL学习笔记6:索引
- MySQL学习笔记(六):索引
- mysql学习笔记(五)索引、视图,导入和导出,备份和恢复
- 【mysql学习笔记】-索引
- MySQL学习笔记 3 索引、存储过程
- Mysql学习笔记二十一——索引
- 学习笔记--mysql索引(三) 独立的列,前缀索引和索引的选择性
- MySQL学习笔记--索引的创建,删除
- MySQL 5.6学习笔记(索引的创建与删除)
- MySQL学习笔记6:索引
- MySQL学习笔记——索引和视图
- Mysql-学习笔记(==》增删主键建立索引 七)
- mysql 索引学习笔记
- mysql 索引的创建与优化 学习笔记
- 【学习笔记】mysql中的索引类型(一)
- 32.笔记 MySQL学习——创建索引