LoginSignup
45

More than 5 years have passed since last update.

【SQL】インデックスの基本知識まとめ

Last updated at Posted at 2018-07-22

インデックスとは何か

  • DBで作成できる索引情報のこと。
  • インデックスの存在する列に対して検索が行われた場合、DBMSはインデックスの使用を試みる為、高速になることが多い。

どのような列に対してインデックスを作成すべきか

一般的にインデックスの効果が高い列

  • WHERE句でよく使われる列
  • ORDER BY句でよく使われる列
  • JOINの結合条件によく使われる列

基準となる概念

  • カーディナリティ
  • 選択率

カーディナリティとは

  • 値のばらつき具合を示す概念
  • もっとも高いのはプライマリーキーなど一意キーの列

選択率とは

  • 選択率 = 絞り込んだ件数 / 総データ件数
  • 具体的な閾値は5%~10%前後
  • 5%未満で絞り込める条件であればインデックスを貼る価値がある(かも)

選択率の高いケースの対処法

インデックスオンリースキャン

  • 必要な列をインデックスするだけで充足する場合にテーブルへのアクセスをスキップする技術
  • 特定の複数列をカバーするインデックス(カバリングインデックス)を作成
  • ひとつのインデックスに含められる列数には限りがある
  • 更新時にテーブルのオーバーヘッドを増やす

データマート(サマリテーブル)を作成

  • データ鮮度(どのタイミングで同期するか)の運用上の難しさや、テーブルサイズ(オリジナルとのサイズとあまり変わらない場合)によっては効果が薄い、など副作用も考慮する必要がある

インデックス作成のデメリット

  • 索引情報保存のため、ディスク容量を消費する
  • テーブルのデータ変更があるとインデックスの書き換えも必要となり、INSERT,UPDATE,DELETE文のオーバーヘッドが増す。

その他

参考図書 : SQL実践入門──高速でわかりやすいクエリの書き方
参考図書 : スッキリわかるSQL入門

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45