溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows為什么不準確

發(fā)布時間:2021-12-24 09:22:07 來源:億速云 閱讀:351 作者:柒染 欄目:云計算

這篇文章給大家介紹EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows為什么不準確,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

“SHOW TABLE STATUS LIKE 里返回的 rows 為什么不是準確的啊 ?”今天,我就抽個時間簡單的說一下!

首先,我們根據(jù)字面意思來看,rows 代表的行數(shù)。準確的說是受影響的行數(shù),或者說是掃描的行數(shù)!

從理論上來說,我實際查詢掃描了多少行數(shù),應該是準確的。但是這里顯示不準確,MySQL 統(tǒng)計的不準確,是 MySQL 故意這樣設計的嗎?如果是,那為什么要這樣設計?

顯然,不準確的這件事,MySQL 是知道的。那么它這樣設計一定是有原因的。

我們都知道,MySQL 有一個優(yōu)化器,它會對你的 SQL 進行一些優(yōu)化。優(yōu)化器的原理就是在真正執(zhí)行 SQL 之前來估算一些每種執(zhí)行策略的代價,選擇一種它認為最好的方案去執(zhí)行!

由于,優(yōu)化器是在真正執(zhí)行前做出的判斷,所以它不可能是準確的。優(yōu)化器,只能根據(jù)索引的“區(qū)分度”來統(tǒng)計、估算要掃描的行數(shù)。

在這里,MySQL 為了操作數(shù)據(jù)更高效。利用數(shù)學知識,做了一個抽樣統(tǒng)計。

抽樣,就是 InnoDB 默認會選擇 N 個數(shù)據(jù)頁,統(tǒng)計這些頁面上的不同值,得到一個平均值,然后乘以這個索引的頁面數(shù),就得到了這個索引的基數(shù)。

以上也就解釋了為什么 EXPLAIN 和 SHOW TABLE STATUS LIKE 里返回的 rows 不準確!

關于EXPLAIN和SHOW TABLE STATUS LIKE里返回的rows為什么不準確就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI