gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Mysql性能优化案例 - 覆盖索引分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

场景 。

产品中有一张图片表,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 。

表结构很简单,主要字段:

  。

复制代码 代码如下:

user_id 用户ID
picname 图片名称
smallimg 小图名称

一个用户会有多条图片记录 。

现在有一个根据user_id建立的索引:uid 。

查询语句也很简单:取得某用户的图片集合 。

  。

复制代码 代码如下:

select picname, smallimg
from pics where user_id = xxx;

优化前 。

执行查询语句(为了查看真实执行时间,强制不使用缓存) 。

  。

复制代码 代码如下:

select SQL_NO_CACHE picname, smallimg
from pics where user_id=17853;

执行了10次,平均耗时在40ms左右 。

使用explain进行分析 。

复制代码 代码如下:

explain select SQL_NO_CACHE picname, smallimg
from pics where user_id=17853

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

使用了user_id的索引,并且是const常数查找,表示性能已经很好了 。

优化后 。

因为这个语句太简单,sql本身没有什么优化空间,就考虑了索引 。

修改索引结构,建立一个(user_id,picname,smallimg)的联合索引:uid_pic 。

重新执行10次,平均耗时降到了30ms左右 。

使用explain进行分析 。

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

看到使用的索引变成了刚刚建立的联合索引,并且Extra部分显示使用了'Using Index' 。

总结 。

'Using Index'的意思是“覆盖索引”,它是使上面sql性能提升的关键 。

一个包含查询所需字段的索引称为“覆盖索引” 。

MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率 。

例如上面的sql,查询条件是user_id,可以使用联合索引,要查询的字段是picname smallimg,这两个字段也在联合索引中,这就实现了“覆盖索引”,可以根据这个联合索引一次性完成查询工作,所以提升了性能. 。

最后此篇关于Mysql性能优化案例 - 覆盖索引分享的文章就讲到这里了,如果你想了解更多关于Mysql性能优化案例 - 覆盖索引分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com