Mysql性能优化案例 - 覆盖索引分享
作者:mdxy-dxy 发布时间:2024-01-27 15:16:59
标签: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
使用了user_id的索引,并且是const常数查找,表示性能已经很好了
优化后
因为这个语句太简单,sql本身没有什么优化空间,就考虑了索引
修改索引结构,建立一个(user_id,picname,smallimg)的联合索引:uid_pic
重新执行10次,平均耗时降到了30ms左右
使用explain进行分析
看到使用的索引变成了刚刚建立的联合索引,并且Extra部分显示使用了'Using Index'
总结
'Using Index'的意思是“覆盖索引”,它是使上面sql性能提升的关键
一个包含查询所需字段的索引称为“覆盖索引”
MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率
例如上面的sql,查询条件是user_id,可以使用联合索引,要查询的字段是picname smallimg,这两个字段也在联合索引中,这就实现了“覆盖索引”,可以根据这个联合索引一次性完成查询工作,所以提升了性能
0
投稿
猜你喜欢
- 一、节点的定义dom节点树图中可见节点HTML文档中的每个成分都是一个节点:整个文档是一个文档节点每个HTML标签是一个元素节点包含在HTM
- 1、方法说明import cv2 as cvimg1 =cv.imread(filename[, flags])参数说明filename图片
- 代码如下import wordcloudimport jiebafont = r'C:\Windows\Fonts\simfang.
- 如下所示:#获取一个值在某个区间的指定倍数的值方法#1# print([i for i in range(1,101) if i%5==0]
- 表的创建CREATE TABLE `lee` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` c
- 1. 集合 set 简介集合的最大特征是其每个元素都是唯一的,它可以删除、可以增加、也可以通过增删实现替换元素,但是它是没有下标的,你无法通
- 一、下载1、官网下载2、某度网盘下载链接: https://pan.baidu.com/s/1BgbZH-aFaJ1nwm2PpDeOSQ?
- 题目:请求出任意区间[a,b]的所有素数,简单考虑实用性这道题看起来应该很easy是吧,但任意区间(这个问题有没get 到)Afanty的分
- 1、测试识别和运行文件识别:在给定的目录中,搜索所有test_.py或者_test.py文件用例识别:Test*类包含的所有test_*的方
- MySQL的数据库管理工具非常多,有哪些优秀的GUI工具可以帮助提高工作效率?不妨看一看这5个MySQL GUI工具。1、Navicat f
- pip install psycopg2出现错误:Looking in indexes: https://pypi.tuna.tsinghu
- 由于后台程序会过滤掉单引号,所以有些地方如果出现莫民奇妙的空格,就表示单引号,特此说明。 /** * @author Super Sha *
- 安 * oostpython调用C/C++的方法有很多,本文使用boost.python。考虑到后期有好多在boost上的开发工作,所以boo
- 因为javascript的事件模型有三种,它们分别是NN4、IE4+和W3C/Safari;这也造成了在不同的浏览器中处理event的差异,
- ndarray 的数据类型数据类型,即 dtype ,也是一个特殊的对象, 它包含了ndarray需要为某一种类型数据所申明的内存块信息(也
- 1.概述mysql-monitor MYSQL 监控工具,优化工具,各种工具为一体的java spring boot 项目git地址:htt
- 首先是安装cmake环境。因为博主测试机是ubuntu,所以直接用apt-get install cmake命令来安装,yum相信应该也一样
- Python 变量类型变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什
- 一、软件测试大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件
- scrapy是用python开发的爬虫框架,从网上查了安装方法,感觉都说的挺复杂,而且很多教程都很有年头了,于是记录了自己的安装过程。首先安