Java基础、中级、高级、架构面试资料

使用 SHOW SESSION STATUS LIKE “Handler%” 替代 EXPLAIN ROWS 估算不准问题

SQL herman 3962浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

接上一篇,我解释了为什么 EXPLAIN 估算 ROWS 不准确?并且解释了 ROWS 的计算原理。本文,我们在来说一下,ROWS 计算不准确,有没有替代方案?

替代方法肯定有,看标题,注意标题。接下来,我们说说 SHOW STATUS。

在 MySQL 性能调试中,EXPLAIN 能够解释 MySQL 执行计划,从而用来估算性能耗时。其中,rows 用来表示在 SQL 执行过程中会被扫描的行数,该值越大,意味着需要扫描的行数,相应的耗时更长。但是需要注意的是 EXPLAIN 中输出的 rows 只是一个估算值,不能完全对其百分之百相信,如 EXPLAIN 中对 LIMITS 的支持就比较有限。

使用 SHOW SESSION STATUS LIKE "Handler%" 正好可以解决这类问题。

具体用法如下:

SELECT * FROM XTTBLOG WHERE TYPE = 'JAVA' ORDER BY CREATED_TIME DESC LIMIT 10;

执行 SHOW SESSION STATUS LIKE "Handler%" 查看当前状态:

SHOW SESSION STATUS LIKE "Handler%"

返回的结果类似如下:

Variable_nameValue
Handler_commit 1
Handler_delete 0
Handler_discover 0
Handler_external_lock 2
Handler_mrr_init 0
Handler_prepare 0
Handler_read_first 1
Handler_read_key 2
Handler_read_last 0
Handler_read_next 0
Handler_read_prev9
Handler_read_rnd 0
Handler_read_rnd_next 3
Handler_rollback 0
Handler_savepoint 0
Handler_savepoint_rollback 0
Handler_update 0
Handler_write 0

查看 Handler_read_prev 的值,发现是 9。可以看到还剩 9 条数据没有读,这才是实际准确的值。

show status 常用命令

-- 查询返回的行数
show status like '%innodb_rows_read%'

-- 插入成功的行数
show status like '%innodb_rows_inserted%'

-- 更新成功的行数
show status like '%innodb_rows_updated%'

-- 删除成功的行数
show status like '%innodb_rows_deleted%'

-- 查看锁
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
show status like '%innodb_status%'
-- show status like '%Table%'

-- 查看慢查询
show status like '%Slow%'

-- 查看运行时间
show status like '%up%'

-- 查看锁的时间分布
show status like'%innodb_row_lock%';

-- 执行select的计数
show status like '%Com_select%'

-- 执行insert的计数,批量插入算一次
show status like '%Com_insert%'

-- 执行更新操作的计数
show status like '%Com_update%'

-- 执行删除操作的计数
show status like '%Com_delete%'

-- 提交事务计数
show status like '%Com_commit%'

-- 回滚事务计数
show status like '%Com_rollback%'

-- 查看警告信息
show warnings

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 使用 SHOW SESSION STATUS LIKE “Handler%” 替代 EXPLAIN ROWS 估算不准问题