mysql索引优化1,单表查询时:联合索引中范围之后的索引将 会失效

案列

有一张实验表  article

这张表中的索引情况 

查询条件中所用到的列已经建立好了索引,且能够查询出一条数据

此时最基本的查询功能就完成了,但是我们拿 mysql 的  explain 工具来分析一下 (如下图)

很明显,在extra项中提示了文件内排序的问题,这个在上百万的数据表甚至更高的表中,是不能够存在的。

那为什么有索引都会出现这个问题呢,我们来分析一下这个sql

扫描二维码关注公众号,回复: 5271584 查看本文章

explain  select id,author_id from article where category_id =1 and comments >1 order by views desc limit 1;
我们对WHERE 条件后的3个所需要的字段都建立了索引,但是comments这个字段的条件是一个范围,导致之后的view字段没有使用到索引,导致索引失效。

那如何解决这个问题:只需要把该表中的索引删除,只给category_id views 。添加索引,

删除原有索引

创建新的索引(创建新索引是comments 字段由于条件是一个范围,所以不创建)

这时在使用explain分析之前的SQL语句(如图)

这是可以发现 不管是type,ref,还是txtra的表现都非常的好。具体各项的值说明请参考我写的文章mysql优化之 Explain 分析sql语句效率  。

这个就是单表索引优化的原则只一:在联合索引中 范围以后的索引会导致索引失效

猜你喜欢

转载自blog.csdn.net/m0_37852399/article/details/86700063