null值對統(tǒng)計信息的影響
作者:佚名 時間:2014-11-22 分享到:
雖然都是使用b-tree索引,但是myisam索引和oracle索引的處理方式不太一樣,myisam的索引中會記錄值為null的列信息,只不過null值的索引鍵占用空間非常少,所以,null值的處理方式可能會影響到mysql的查詢優(yōu)化器對執(zhí)行計劃的選擇,于是mysql提供了myisam_stats_method這個參數(shù)讓我們可以自行決定對索引中的null值的處理方式.
myisam_stats_method參數(shù)的作用就是告訴myisam在收集統(tǒng)計信息的時候,是認為所有null值等同,還是每個null值是完全不相等的,所以可設置的值也為nulls_unequal和nulls_equal.
當設置myisam_stats_method=要_并轉,myisam在搜索統(tǒng)計信息時會認為每個null值都不同,則基于這個字段索引的cardinality就會更大,也就是說myisam會認為distinect值數(shù)量更多,這樣就會讓查詢優(yōu)化器處理query的時候使用這個索引的傾向性更多.
而在設置myisam_stats_method=nulls_equal之后,myisam搜集統(tǒng)計信息的時候則會認為每個null值都是一樣的,這樣cardinality數(shù)值會降低,優(yōu)化器選擇執(zhí)行計劃的時候放棄這個索引的傾向性更高.