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