MySQL中Innodb如何計算索引的統計資訊?
MySQL查詢優化器的執行計劃是根據統計資訊中鍵值的分佈選擇合適的索引,這是基於索引的選擇性的。innodb通過抽樣的方式來計算統計資訊,首先隨機的讀取少量的索引頁面,然後以此為樣本計算索引的統計資訊。老的innodb預設樣本頁面數為8,新版本可以通過innodb_stats_transient_sample_pages(5.6.3之前是innodb_stats_sample_pages)來設定樣本頁的數量。樣本頁的數量設定的更大,理論上來說是可以得到更準確的統計資訊,特別是對於超大的表。但是具體設定多大合適還是需要根據實際情況
innodb索引的統計資訊儲存方式有兩種,一種是非永續性儲存,既儲存在記憶體中,如果伺服器重啟就會丟失;一種是永續性儲存,即儲存到磁碟上,可以永久儲存。通過引數innodb_stats_persistent來控制。在MySQL5.6.6之後,預設是永續性儲存。
兩種儲存方式:
1ã 非永續性儲存,通過設定innodb_stats_persistent=OFF或者使用STATS_PERSISTENT=0建立,通過以下操作可以觸發計算統計資訊:
a)
執行analyze table
b)
在使用show table status、show index等命令的時候,或者在查詢系統表INFORMATION_SCHEMA.TABLES 和 INFORMATION_SCHEMA.STATISTICS的時候。需要一個引數控制是否會觸發更新統計資訊,innodb_stats_on_metadata=on時。
這裡需要注意的是,資料庫中有大量的表或者索引的時候,會給資料庫的IO帶來更大的壓力;並且如果頻繁的更新統計資訊,MySQL的執行計劃的穩定性也會受到影響。
c)
在啟動mysql客戶端的時候採用–auto-rehash引數。
d)
一個表首次被開啟的時候。
e)
表發生非常大的變化的時候(大小變化超過1/16或者新插入20億行資料)。
2ã 永續性儲存,設定innodb_stats_persistent=ON,或者STATS_PERSISTENT=1建立。
持久化的資訊儲存在MySQL的系統表mysql.innodb_table_stats
和mysql.innodb_index_stats 中。
因為是永續性儲存到磁碟上,所以在表一段時間之後或者是進行大的改動的時候需要手動執行analyze table來更新統計資訊。
總結:建議設定永續性儲存到磁碟上,可以得到更穩定的執行計劃,並且在系統重啟之後可以更快速的生成統計資訊。但是需要週期性的執行analyze table來手動更新統計資訊,否則統計資訊永遠不變。
相關文章
- PostgreSQL中統計資訊計算SQL
- innodb索引的統計資訊不存在物理儲存上索引
- MySQL 5.7 ANALYZE TABLE分析索引的統計資訊MySql索引
- MySQl 配置InnoDB持久化的優化器統計資訊MySql持久化優化
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- MySQL索引統計資訊更新相關的引數MySql索引
- MySQL:Innodb表 Data free 的計算概要MySql
- MySQL系統如何收集統計資訊MySql
- MySQL如何計算統計redo log大小MySql
- 【Mysql】InnoDB 中的 B+ 樹索引MySql索引
- Percona MySQL 5.6 配置InnoDB優化器永久統計資訊MySql優化
- MySQL InnoDB 索引MySql索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- MySQL InnoDB儲存引擎更新Cardinality統計資訊的策略介紹MySql儲存引擎
- MySQL 統計資訊MySql
- MYSQL INNODB 如何計算B+樹表的最大容量和行數MySql
- MySQL 配置InnoDB配置非持久優化器統計資訊引數MySql優化
- 【STAT】Oracle 表統計資訊被鎖,如何建立索引Oracle索引
- mysql innodb索引高度MySql索引
- MySQL中InnoDB引擎對索引的擴充套件MySql索引套件
- 探索MySQL的InnoDB索引失效MySql索引
- 11g組合索引的統計資訊會用於對錶返回基數的計算索引
- MySQL中的統計資訊相關引數介紹MySql
- MySQL InnoDB的索引擴充套件MySql索引套件
- MySQL InnoDB搜尋索引的StopwordsMySql索引
- MySQL的InnoDB索引原理詳解MySql索引
- MySQL統計資訊系列MySql
- MySQL統計資訊簡介MySql
- mysql如收集統計資訊MySql
- MySQL 5.5 統計資訊收集MySql
- MySQL innodb如何選擇一個聚簇索引MySql索引
- 在 MySQL 中,如何計算一組資料的中位數?MySql
- SQL優化之統計資訊和索引SQL優化索引
- MySQL | 05 如何設計高效能的索引?MySql索引
- mysql索引設計MySql索引
- 《MySQL實戰45講》學習筆記4——MySQL中InnoDB的索引MySql筆記索引
- 執行資訊統計後沒有使用索引索引
- 【統計資訊】Oracle統計資訊Oracle