mysql sqlnocache_Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE

本文通过一个案例展示了如何利用SQL_NO_CACHE关键字和创建覆盖索引来优化MySQL查询性能。在对一张包含百万条记录的图片表进行用户图片查询时,通过建立(user_id, picname, smallimg)的联合索引,查询时间从40ms降低到30ms。SQL_NO_CACHE用于避免查询结果缓存,而覆盖索引则减少了回表操作,提高查询效率。" 3364124,29812,ACE智能指针详解:ACE_Auto_Ptr与ACE_Refcounted_Auto_Ptr,"['C++', '库函数', '内存管理', 'RAII', '智能指针']
摘要由CSDN通过智能技术生成

场景

产品中有一张图片表pics,数据量将近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

2eafa1b690876bfeeb750a9f606668ea.png

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

优化后

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

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

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

使用explain进行分析

5dd4374bcf3a478e25cf5d62fcab3b56.png

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

总结

‘Using Index'的意思是“覆盖索引”,它是使上面sql性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值