博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql的handler_read_next理解
阅读量:5751 次
发布时间:2019-06-18

本文共 880 字,大约阅读时间需要 2 分钟。

image

研发提问:执行计划这么优秀,扫描了143行记录就得出结果,怎么还需要0.68s这么长的时间?

废话不多说,直接上实验。清空status状态,再执行sql语句,查看handler状态:

mysql> flush status;mysql> SELECT * FROM trade_quotation WHERE symbol = 'LTC' ORDER BY id DESC LIMIT 30;mysql> show status like '%hand%';

image

解释一下各个参数:

Handler_read_first:此选项表明SQL是在做一个全索引扫描,注意是全部,而不是部分,所以说如果存在WHERE语句,这个选项是不会变的。
Handler_read_key:此选项数值如果很高,那么恭喜你,你的系统高效的使用了索引,一切运转良好。
Handler_read_next:此选项表明在进行索引扫描时,按照索引从数据文件里取数据的次数。
Handler_read_prev:此选项表明在进行索引扫描时,按照索引倒序从数据文件里取数据的次数,一般就是ORDER BY … DESC
Handler_read_rnd:就是查询直接操作了数据文件,很多时候表现为没有使用索引或者文件排序。
Handler_read_rnd_next:此选项表明在进行数据文件扫描时,从数据文件里取数据的次数。

可以看到这个sql的Handler_read_prev为2828694,该值已经非常的高。所以这个sql即便索引使用正确,也还是需要0.68s这么长的时间,同样我们可以看一下将desc换成asc时候的Handler_read_next:

mysql> flush status;mysql> SELECT * FROM trade_quotation WHERE symbol = 'LTC' ORDER BY id aSC LIMIT 30; mysql> show status like '%hand%';

image

顺序扫描171次即可返回结果,因此该sql查询起来很快。

转载地址:http://zjukx.baihongyu.com/

你可能感兴趣的文章
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
我的友情链接
查看>>
mysql数据类型---数值型---int
查看>>
为eclipse安装maven插件
查看>>
公司新年第一次全员大会小记
查看>>
最懒的程序员
查看>>
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
修改hosts文件里面的主机名,oralce asm无法启动
查看>>