您好,登錄后才能下訂單哦!
這篇文章給大家介紹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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。