2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DBのインデックスとは

Posted at

勉強前イメージ

検索しやすくする・・・みたいな感じだった気がする

調査

インデックス とは

索引という意味で、データベースのテーブルへの検索処理を高速させるものになります。
インデックスをはると、膨大なデータベースの中の特定データを検索する際にどこにそのデータが存在するかを短時間で特定できます。
テーブルとは別にインデックス用のデータとして作成され、テーブルとは別で管理されるイメージです。

インデックスの効果について

インデックスには効果として現れる場合と現れない場合があります。
効果として現れる場合の特徴は以下になります。
特にデータが多いとそもそも全文を検索しながら確認を行うようなもので遅くなります。

  • データの行数が多い
  • 検索対象の項目に値の重複や偏りが少ない
  • 表の更新・追加等が少ない

現れづらいのは以下になります。
そもそもデータが少なかったらインデックスをはったとしても時間の差分はあまりない場合があります。

  • データの行数が少ない
  • 検索の際に表の殆どのデータを取得する

インデックスの種類

インデックスはいくつか種類がありますが、代表的なものは以下になります。

  • Bツリーインデックス

木構造のインデックスでoracleのデフォルトのインデックスになります。
ルートノード・ブランチノード(※1)には関連付けられている子要素が持ってるキーの値のデータと位置情報が格納されています。
リーフノード(※2)にはキーの値とレコードの位置を示す位置情報が格納されています。

※1
ルートノード(親要素のないブロック)
ブランチノード(親要素・子要素どちらも持ってるブロック)

※2
リーフノード(子要素のないブロック)

  • ビットマップインデックス

キーの値を含む行をビット1を立てて表すインデックスで、
ビット1が立っている行の格納位置を取得した後、取得した位置情報を使ってデータにアクセスします。

  • ハッシュインデックス

Mysql等で使用されているインデックスで、
キーの値をハッシュ化した値をデータに格納し、検索の際にはハッシュ化したキーの値の場所に直接アクセスします。

勉強後イメージ

なんか前もちょっとやったような気もするけど出てこないので見てみた。
ルートノードとかも初めて知った。
どこに何があるか早く検索できるためだね。
よく使うSQLとかだったらインデックスはるのが効果的?

参考

2
3
0

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?