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

作者:mdxy-dxy 时间:2024-01-27 15:16:59 

场景

产品中有一张图片表,数据量将近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,性能优化,覆盖索引
0
投稿

猜你喜欢

  • python之语句mode = 'test' if y is None else 'train'问题

    2021-02-04 20:35:17
  • CodeIgniter分页类pagination使用方法示例

    2023-11-24 10:33:05
  • vue.js 实现图片本地预览 裁剪 压缩 上传功能

    2024-05-11 09:11:06
  • 手把手教你使用Python绘制时间序列图

    2021-08-04 14:32:07
  • 彻底弄懂CSS盒子模式之一(DIV布局快速入门)

    2007-05-11 17:03:00
  • python多进程使用apply_async的使用方法详解

    2022-11-14 16:08:50
  • 一文教你利用Python画花样图

    2023-09-01 20:26:42
  • python3获取当前文件的上一级目录实例

    2021-06-03 02:22:22
  • 关于python多重赋值的小问题

    2023-08-04 06:38:16
  • Bootstrap table分页问题汇总

    2024-04-29 13:12:07
  • web.py 十分钟创建简易博客实现代码

    2022-10-23 00:55:38
  • 长文章自动分页asp实例-支持HTML

    2007-10-10 21:29:00
  • 现代 javscript 编程

    2011-04-21 16:24:00
  • Python fileinput模块使用介绍

    2023-08-22 14:32:12
  • 飞扬远程获取类Asp xmlHttp 源码

    2010-04-03 20:37:00
  • 交互设计的方法

    2010-08-18 12:32:00
  • PHP cron中的批处理

    2024-05-11 09:45:39
  • 将字典转换为DataFrame并进行频次统计的方法

    2023-11-21 05:37:30
  • Flask和pyecharts实现动态数据可视化

    2022-06-15 04:21:20
  • axios接口管理优化操作详解

    2024-04-30 10:28:09
  • asp之家 网络编程 m.aspxhome.com