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

接上一篇,我解释了为什么 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

参考资料

  • MySQL EXPLAIN limits and errors.

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

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

原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/252392.html

(0)
上一篇 2022年5月4日
下一篇 2022年5月4日

相关推荐

发表回复

登录后才能评论