MySql学习笔记(九):索引失效-创新互联

数据准备:

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、稷山网站维护、网站推广。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、复合索引丢失第一列字段:
MySql学习笔记(九):索引失效

2、复合索引,跳过中间字段:

先来看查询条件只有第一列时的结果:

MySql学习笔记(九):索引失效

接下来执行跳过中间字段的情况:

MySql学习笔记(九):索引失效

此时索引确实生效,但key_len依旧是153,理论上查询精度越大key_len会越大,但此时并没有增大就表示条件【a='123'】上的索引并没有用到。

复合索引应当遵守【最左前列原则】,即:查询应该从索引的最左前列开始并且不能跳过中间列,一旦跳过某个列,该列之后的列上的索引都会失效

3、在索引上进行计算、函数、类型转换等操作导致索引失效:
使用函数:

MySql学习笔记(九):索引失效

进行自动类型转换,title定义的是varchar类型,但查询时给他赋值int导致mysql会自动给他进行类型转换导致索引失效

MySql学习笔记(九):索引失效

使用  + - * / 等计算

MySql学习笔记(九):索引失效

4、使用了范围导致该索引之后的索引失效

先来看一下没使用范围的sql执行情况:

MySql学习笔记(九):索引失效

随着查询精度的增大,key_len增大,表示两个条件的索引均有效,现在在范围之后再添加一个查询条件:

MySql学习笔记(九):索引失效

key_len依旧保持158,说明票【a=1】这个条件上的索引是失效的。

5、使用不等于操作(!= 或 <>)

MySql学习笔记(九):索引失效

6、使用 is not null 

MySql学习笔记(九):索引失效

7、使用前导模糊查询

先来看后导查询:

MySql学习笔记(九):索引失效

此时索引并没有失效,再来看前后导模糊查询:

MySql学习笔记(九):索引失效

此时索引已经失效,那么单独使用前导查询:

MySql学习笔记(九):索引失效

此时索引失效,因此,使用前导查询会导致索引失效。

8、mysql不走索引会有更好的查询性能时索引失效

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页名称:MySql学习笔记(九):索引失效-创新互联
URL网址:http://hbruida.cn/article/ddgoso.html