您好,登錄后才能下訂單哦!
如何手動更新MYSQL 表的統計分析記錄,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
大致上大部分的數據庫都有統計分析,主要的作用就是在語句執行的情況下,能盡量的選擇相對正確的方式來走執行計劃,越準確的統計分析,可以帶來更好的執行計劃和數據庫的語句執行性能,但相對來說越準確的統計分析,也會帶來系統在統計時的性能消耗,越大的數據庫系統,對統計分析的需求和要求也就越高。
從MYSQL 5.6 開始,統計分析的信息會固化在系統的存儲中,通過下面的語句可以查看我們相隔的開關是否打開。
而在進行統計分析中都有一個采樣率的概念,也就是根據估計索引列的基數和其他的統計信息要抽樣的索引頁的數量。其實這樣算看似合理,但實際上如果挑選的索引頁不具有代表性,這樣的算法還可能會錯誤引導數據庫的基本的統計分析的信息。這也就是為什么有時候明明建立了索引,卻不走,在手動觸發統計分析后,執行的結果有變化了的原因。默認抽樣的頁數是8 pages,我們可以改動默認抽樣的頁數,來達到提高準確率的功效。但同樣付出的代價就是,在抽樣時的消耗的I/O 和相關資源。
我們是可以定期對一些大表進行 analyze table 的,可以寫一個定期的運行的腳本來完成此事,盡量達到統計分析的準確性。但通常一般都是通過自動觸發的方式來完成這樣的工作。
而我們可以進行一個測試,關于MYSQL的索引和真是的表信息之間是否有差距。
1 我們將需要檢驗的字段進行distinct 并且 count 返回的數據和我們建立索引的數據進行比對,看看是否有問題,對比兩張圖中的數據,可以清晰的發現,索引中的Cardinality 和實際中的字段的數據比較,是不一樣的。
其實我們已經操作了analyze table 但是我們依然沒有得到準確的數字,在平時這可能不會有什么問題,但如果是較大的表例如上千萬的表,如果這方面錯的比較錯,會對執行計劃產生問題,這時候可能就需要我們通過手動的方式來更新某些表的記錄。
update mysql.innodb_table_stats set n_rows = 300024 where database_name = 'employees' and table_name = 'employees';
同理也可以更新 innodb_index_stats表里面的數據
以上方法僅僅使用于統計分析的不準確嚴重影響到了執行計劃,一般我們還是不要動系統中的統計分析表,另外這樣做的另一個問題就是, 你的表不會頻繁更新的操作,并且你要找好自己更新數值的時間點。
看完上述內容,你們掌握如何手動更新MYSQL 表的統計分析記錄的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。