源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Mysql性能优化案例 - 覆盖索引分享

  • 时间:2020-01-26 20:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Mysql性能优化案例 - 覆盖索引分享
[b]场景[/b] 产品中有一张图片表,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 表结构很简单,主要字段:
[u]复制代码[/u] 代码如下:
user_id 用户ID picname 图片名称 smallimg 小图名称
一个用户会有多条图片记录 现在有一个根据user_id建立的索引:uid 查询语句也很简单:取得某用户的图片集合
[u]复制代码[/u] 代码如下:
select picname, smallimg from pics where user_id = xxx;
[b]优化前[/b] 执行查询语句(为了查看真实执行时间,强制不使用缓存)
[u]复制代码[/u] 代码如下:
select SQL_NO_CACHE picname, smallimg from pics where user_id=17853;
执行了10次,平均耗时在40ms左右 使用explain进行分析
[u]复制代码[/u] 代码如下:
explain select SQL_NO_CACHE picname, smallimg from pics where user_id=17853
[img]http://files.jb51.net/file_images/article/201603/20160310123515.png[/img] 使用了user_id的索引,并且是const常数查找,表示性能已经很好了 [b]优化后[/b] 因为这个语句太简单,sql本身没有什么优化空间,就考虑了索引 修改索引结构,建立一个(user_id,picname,smallimg)的联合索引:uid_pic 重新执行10次,平均耗时降到了30ms左右 [b]使用explain进行分析[/b] [img]http://files.jb51.net/file_images/article/201603/20160310123516.png[/img] 看到使用的索引变成了刚刚建立的联合索引,并且Extra部分显示使用了'Using Index' [b]总结[/b] 'Using Index'的意思是“覆盖索引”,它是使上面sql性能提升的关键 一个包含查询所需字段的索引称为“覆盖索引” MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率 例如上面的sql,查询条件是user_id,可以使用联合索引,要查询的字段是picname smallimg,这两个字段也在联合索引中,这就实现了“覆盖索引”,可以根据这个联合索引一次性完成查询工作,所以提升了性能
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部