mysql中sql语句优化之添加覆盖索引优化流程步骤
数据库  /  管理员 发布于 1年前   764
我们常说的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秒。
完
博主 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..xiaoB 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..BUG4 在
你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..博主 在
go语言+beego框架中获取get,post请求的所有参数中评论 @ t1 直接在router.go文件中配就ok..Jade 在
如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号