mysql cardinality 索引選擇

 官方文檔的解釋:
An estimate of the number of unique values in the index. This is updated by running ANALYZE TABLE or myisamchk -a. Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables. The higher the cardinality, the greater the chance that MySQL uses the index when doing joins.

總結下來cardinality列的值有以下特性:

1. 列值代表的是此列中存儲的唯一值的個數(如果此列爲primary key 則值爲記錄的行數)
2. 列值只是個估計值,並不準確。
3. 列值不會自動更新,需要通過analyze table來進行更新。
4. 列值的大小影響join時是否選用這個index的判斷。
5. 初建index時,MyISAM的表cardinality的值爲null,InnoDB的表cardinality的值大概爲行數。
6. MyISAM與InnoDB對於cardinality的計算方式不同。

1. cardinality簡單的說就是,你索引列的唯一值的個數,如果是複合索引就是唯一組合的個數。
2. 這個數值將會作爲mysql優化器對語句執行計劃進行判定時依據。如果唯一性太小,那麼優化器會認爲,這個索引對語句沒有太大幫助,而不使用索引。
3. cardinality值越大,就意味着,使用索引能排除越多的數據,執行也更爲高效。


舉幾個例子吧:
a,b,c
1,1,1
1,1,2
1,2,1
1,2,2
2,1,1
2,1,2
2,2,1
2,2,2
假如你對a列作索引,那麼它的cardinality就是2,因爲此列只有1和2兩個值。
假如你對a,b列作複合索引,那麼它的cardinality就是4,因爲這兩列有(1,2),(1,1),(2,1),(2,2)這幾種組合。
假如你對a,b,c作複合索引,那麼它的cardinality就是8.........
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章