mysql中sql语句优化之添加覆盖索引优化流程步骤
数据库  /  管理员 发布于 3年前   1355
我们常说的sql性能优化中的索引优化大部分都是说覆盖索引
进入正题分析
表结构
CREATE TABLE `NewsList` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(200) DEFAULT NULL,
`bankid` int(11) DEFAULT NULL COMMENT '银行id 优惠对象',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `bankid` (`bankid`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=411808 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
41万数据
测试一个简单的sql查询语句
select title from NewsList where bankid=1 order by created_at asc limit 10;
查询时间:
> OK
> 时间: 7.731s
用EXPLAIN跑一下
从EXPLAIN的结果可以看出,查询已经使用了索引,但为什么还这么慢?
分析:
首先,该语句ORDER BY 使用了Using filesort文件排序,查询效率低;
其次,查询字段不在索引上,没有使用覆盖索引,需要通过索引回表查询;
当然,也有数据分布的原因。
解决方案:
由于只需查询title字段,添加一个联合索引便可以避免回表和文件排序,
利用覆盖索引提升查询速度,同时利用索引完成排序。
添加覆盖索引:我这里直接用navicat工具添加
覆盖索引:
sql只需要通过索引就可以返回查询所需要的数据,
而不必通过二级索引查到主键之后再去查询数据。
我们再用EXPLAIN跑一下:
在用上面的sql语句查询一下
> OK
> 时间: 0.011s
Extra信息已经有'Using Index',表示已经使用了覆盖索引。
经过索引优化之后,线上的查询基本不超过0.01秒。
完
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号