2022
我们一起努力

EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确

这篇文章给大家介绍EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

“SHOW TABLE STATUS LIKE 里返回的 rows 为什么不是准确的啊 ?”今天,我就抽个时间简单的说一下!

首先,我们根据字面意思来看,rows 代表的行数。准确的说是受影响的行数,或者说是扫描的行数!

从理论上来说,我实际查询扫描了多少行数,应该是准确的。但是这里显示不准确,MySQL 统计的不准确,是 MySQL 故意这样设计的吗?如果是,那为什么要这样设计?

显然,不准确的这件事,MySQL 是知道的。那么它这样设计一定是有原因的。

我们都知道,MySQL 有一个优化器,它会对你的 SQL 进行一些优化。优化器的原理就是在真正执行 SQL 之前来估算一些每种执行策略的代价,选择一种它认为最好的方案去执行!

EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确

由于,优化器是在真正执行前做出的判断,所以它不可能是准确的。优化器,只能根据索引的“区分度”来统计、估算要扫描的行数。

在这里,MySQL 为了操作数据更高效。利用数学知识,做了一个抽样统计。

抽样,就是 InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。

以上也就解释了为什么 EXPLAIN 和 SHOW TABLE STATUS LIKE 里返回的 rows 不准确!

关于EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

赞(0)
文章名称:《EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确》
文章链接:https://www.fzvps.com/104745.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!