Index
RDBにおけるインデックス。すべてのカラムに付与してしまえばいいというものではない。 SQLを実行する際、RDBは存在するインデックスをもとに、最適な計画をたてるので、たくさんあると迷うし、インデックスがあるほどに、そのインデックスツリーによって更新処理が遅くなったり弊害がある。
Indexを貼るべきかどうかの指標としてcardinality(カーディナリティ)がある。
カーディナリティは、カラム内にどれくらい多様な値があるかどうか。この値が高ければ高いほどIndexに向いている。
都道府県は47種類。・・・カーディナリティ低い。
運転免許証idはすべて異なる。・・・・カーディナリティ高い。
あくまで効果が出やすいという話である。
インデックスの注意点。
SQLで否定(!=, <>)は、特定のノード以外のすべてのノードが該当してしまうので、B-treeによる絞り込みがきかずに、全く役に立たない。インデックスも使われない。
SQL関数(SUBSTRなど)を使ってもインデックスは利用できない。
col_1 * 10みたいに演算を行ってもインデックスが利用できない。
IS NULL, IS NOT NULL述語でもインデックスが利用できない。
後方一致、中間一致のLIKEを使うとインデックスが利用できない。 例)LIKE '%a', LIKE '%a%'