Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

インデックスとは何か

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

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

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

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

基準となる概念

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

カーディナリティとは

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

選択率とは

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

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

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

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

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

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

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

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

その他

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした