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

案列

有一张实验表  article

这张表中的索引情况 

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

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

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

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

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语句效率  。

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值