这篇文章给大家介绍EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
“SHOW TABLE STATUS LIKE 里返回的 rows 为什么不是准确的啊 ?”今天,我就抽个时间简单的说一下!
首先,我们根据字面意思来看,rows 代表的行数。准确的说是受影响的行数,或者说是扫描的行数!
从理论上来说,我实际查询扫描了多少行数,应该是准确的。但是这里显示不准确,MySQL 统计的不准确,是 MySQL 故意这样设计的吗?如果是,那为什么要这样设计?
显然,不准确的这件事,MySQL 是知道的。那么它这样设计一定是有原因的。
我们都知道,MySQL 有一个优化器,它会对你的 SQL 进行一些优化。优化器的原理就是在真正执行 SQL 之前来估算一些每种执行策略的代价,选择一种它认为最好的方案去执行!
由于,优化器是在真正执行前做出的判断,所以它不可能是准确的。优化器,只能根据索引的“区分度”来统计、估算要扫描的行数。
在这里,MySQL 为了操作数据更高效。利用数学知识,做了一个抽样统计。
抽样,就是 InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。
以上也就解释了为什么 EXPLAIN 和 SHOW TABLE STATUS LIKE 里返回的 rows 不准确!
关于EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows为什么不准确就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。