カーディナリティ
cardinality
重複を省いて何種類の値があるかを数値化したもの
1つのtable内の、複数のcolumnのカーディナリティ同士を比較して、相対的に「高い/低い」と言うことになる
だから、tableAのcolumnXと、tableBのcolumnYのカーディナリティを比較しても全く無意味
カーディナリティが低い = 種類数が少ない = 重複度が大きい
カーディナリティが高い = 種類数が多い = 重複度が低い
例
全てのrecordに対して、同じ値が入っている場合は、最もカーディナリティが低い
全てのrecordに対して、異なる値が入っている場合は、最もカーディナリティが高い
table postにおいて、
取りうるgenreの種類が5個
取りうるtagの種類が1000個
のような場合、「genreのカーディナリティはtagのそれに比べて低い」と言える
参考
カーディナリティを考える際に、データのバラツキ度合いも考慮しておく
取りうる値の幅が広い場合でも、偏りが激しいためにカーディナリティが小さくなることもある
例えば、column Xの値が、a,a,a,a,...,a,b,cのようなこともある
この場合も、同様に「Xのカーディナリティは低い」のような言い方はできると思う(実際低いので)
ということを考えれば、↓この主張はちょっとおかしい?
この場合 1 / 365 ≒ 0.27%となるので、インデックスを作成する意味はあるといえるだろう。ref (まあ、この記事はrecord数に触れてないのでそもそもよくわからんが)
record数が1000件で、その内、636件が「1/1」だった場合、63%までしか絞り込めない