#インデックスとは何か
- DBで作成できる索引情報のこと。
- インデックスの存在する列に対して検索が行われた場合、DBMSはインデックスの使用を試みる為、高速になることが多い。
どのような列に対してインデックスを作成すべきか
一般的にインデックスの効果が高い列
- WHERE句でよく使われる列
- ORDER BY句でよく使われる列
- JOINの結合条件によく使われる列
基準となる概念
- カーディナリティ
- 選択率
カーディナリティとは
- 値のばらつき具合を示す概念
- もっとも高いのはプライマリーキーなど一意キーの列
選択率とは
- 選択率 = 絞り込んだ件数 / 総データ件数
- 具体的な閾値は5%~10%前後
- 5%未満で絞り込める条件であればインデックスを貼る価値がある(かも)
選択率の高いケースの対処法
インデックスオンリースキャン
- 必要な列をインデックスするだけで充足する場合にテーブルへのアクセスをスキップする技術
- 特定の複数列をカバーするインデックス(カバリングインデックス)を作成
- ひとつのインデックスに含められる列数には限りがある
- 更新時にテーブルのオーバーヘッドを増やす
###データマート(サマリテーブル)を作成
- データ鮮度(どのタイミングで同期するか)の運用上の難しさや、テーブルサイズ(オリジナルとのサイズとあまり変わらない場合)によっては効果が薄い、など副作用も考慮する必要がある
##インデックス作成のデメリット
- 索引情報保存のため、ディスク容量を消費する
- テーブルのデータ変更があるとインデックスの書き換えも必要となり、INSERT,UPDATE,DELETE文のオーバーヘッドが増す。
その他
参考図書 : SQL実践入門──高速でわかりやすいクエリの書き方
参考図書 : スッキリわかるSQL入門