InnoDB以表為單位來收集統計資料,這些資料可以是基于磁盤的永久性資料,也可以是基于記憶體的而非永久性統計資料,
- 永久性地存盤統計資料:統計資料存盤在磁盤上,在服務器重啟之后這些統計資料依然存在,
- 非永久性地存盤統計資料:統計資料存盤在記憶體上,當服務器關閉時這些統計資料就被清除掉,等到服務器重啟之后,在某些適當的場景下會重新收集這些統計資料,
innodb_stats_persistent控制著服務器使用的永久性統計資料還是非永久性統計資料,控制統計資料存盤到何處,在MySQL 5.6.6版本之后, innodb_stats_persistent值默認是ON,也就是統計資料默認被存到磁盤上,
按照一定演算法,從聚簇索引中選取幾個葉子節點頁面,統計每個頁面中包含的記錄數量,然后計算一個頁面中平均包含的記錄數量,并將其乘以全部葉子節點的數量,結果就是
n_rows的值,
innodb_stats_persistent_sample_pages控制著永久性統計資料的采樣頁面數量,它的默認值是8,該值設定的越大,統計的n_rows值越精確,但是統計耗時也得最久,改值設定的越小,統計n_rows值越不精確,但是統計耗時也就越少,
innodb_stats_auto_recalc控制著是否自動重新計算統計資料,每個表維護了一個變數,該變數記錄著對該表進行增刪查改的記錄條數,如果發生變動的記錄數量超過了表大小的10%,并且自動重新計算統計資料的功能是打開的(默認是ON,打開狀態),那么服務器就會重新計算一次統計資料,
我們可以在創建和修改表時通過指定STATS_PERSISTENT、STATS_AUTO_RECALC、STATS_SAMPLE_PAGES的值來控制收集統計資料時的一些細節,
innodb_stats_method決定著在統計某個索引列中不重復的值得數量時如何對待NULL值,這個系統變數有三個候選值,
nulls_equal:認為所有的null值都是相等的,傾向于不使用索引進行訪問,是innodb_stats_method的默認值,nulls_unequal:認為所的NULL值都是不相等的,傾向于使用索引進行訪問,nulls_ignored:直接把NULL值忽略掉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/267431.html
標籤:其他
上一篇:[MySQL]開啟慢查詢日志以及未使用索引SQL日志
下一篇:MyBatis的基本使用
