DesignAssembler

備忘録に近い

インデックス設計

インデックスは、データベースにおける索引で、目的の情報を見つけやすくしてくれます。

インデックスの性質

  • アプリケーション透過性
  • データ透過性

アプリケーション透過性
非正規化→正規化は大きな変更が必要だが、インデックスはインデックスを追加するだけでいいのでアプリケーションに影響を与えない。

データ透過性
インデックスを作成してもデータに影響を与えない。

B-treeインデックス

いくつかあるインデックスの種類のうち一番ポピュラーなのがB-treeインデックスです。

B-treeインデックスは平衡木から成っており、木の高さも3〜4と低いのでデータ量が増えるほどフルスキャンより高速になります。

B-treeインデックスの設計

以下の方針でインデックスを張る列を選びます。

  1. 大規模なテーブル
  2. カーディナリティの高い列
  3. whereの選択条件または結合条件で使われている列

ここでの大規模は、レコード数が1万件以上の事を指します。
また、カーディナリティとは各テーブルが取りうる値の数の事です。
例えば、日本の球団の列があるとするならその列が取りうる値は12通りになります。よってカーディナリティは12です。

まとめ

よくwhereする列にはインデックス張っといたほうがいい。
ただ、挿入が少し遅くなる。

参考

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書