LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

データベースのインデックスについて

インデックスとは

データベースの検索を速くするもののことです。
言い換えると見出しのことです。

インデックスの作成

下のようなデータがあったとします。

⚫︎会社テーブル

ID 社員番号 名前
1 1459 田中さん
2 4689 鈴木さん
3 5698 佐藤さん

SQLのインデックスの作成の文です。

CREATE INDEX インデックス名  ON テーブル名(列名)

上の表に当てはめると

CREATE INDEX Company  ON  会社テーブル(社員番号)

みたいな感じです。インデックス名は名前が重複しないように自由に変えられます
これでデータベース内にインデックスを作成できます。

インデックスの削除

インデックスを削除する文も見ていきましょう。
同じ会社テーブルがあるとします。

⚫︎会社テーブル

ID 社員番号 名前
1 1459 田中さん
2 4689 鈴木さん
3 5698 佐藤さん

SQLのインデックスの削除文です。

DROP INDEX インデックス名 ON テーブル名

上の表に当てはめると

DROP INDEX Company ON 会社テーブル

データベース内にインデックスを削除できます。

インデックス設定の効果が高い列

⚫︎WHERE
WHERE句の絞り込み条件でインデックスを利用します。

SELECT * FROM 会社テーブル
WHERE 名前 = '田中さん'

会社テーブルから田中さんのデータを取得するみたいな意味です。

⚫︎JOIN
テーブル同士の結合はインデックスを使うと高速化します。
上記の会社テーブルと課外活動テーブルを想定します。

課外活動テーブル

ID クラブ番号 メンバー
1 3 中田
2 4 岡田
SELECT * FROM 会社テーブル
JOIN 課外活動テーブル
ON 会社テーブル.社員番号 = 課外活動テーブル.クラブ番号

会社テーブルと課外活動テーブルを結合して
その中の社員番号とクラブ番号を結合する意味です。

⚫︎ORDER BY
インデックスの並び替えを高速にします。

SELECT * FROM 会社テーブル
ORDER BY 名前 社員番号

会社テーブルの名前と社員番号を取得するという意味です。

⚫︎補足
主キー、外部キーには自動でインデックスが与えられます。

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

・検索のための情報を保存するためにディスクの容量が消費し更新処理が遅くなります。
・テーブルのデータが変更されインデックスを書き換える必要がある。
INSERT文、UPDATE文、DELETE文のオーバーヘッドが増える。

複合インデックス

複数のカラムに1つのインデックスにする

⚫︎clubテーブル

ID クラブ名 メンバー
1 野球部 太郎くん
2 サッカー部 次郎くん

この表を元に複合インデックスのやり方です。

SELECT * FROM clubテーブル WHERE クラブ名 = XXX  AND メンバー= XXX

これをインデックスに変えると

CREATE INDEX IDX_clubname_member ON clubテーブル(クラブ,メンバー);

⚫︎参考資料
https://www.google.com/search?q=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8Bsql%E5%85%A5%E9%96%80&rlz=1C5CHFA_enJP904JP905&oq=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA&aqs=chrome.1.69i57j35i39j0i512l2j0i131i433i512j0i512l2j0i4i131i433i512l2j0i4i433i512.2639j0j15&sourceid=chrome&ie=UTF-8

⚫︎参考動画
https://www.youtube.com/watch?v=iIoq-3veMYk&list=PL-1KBX2gDRujQaRgEByueezHBiqHP8KDD&index=8

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
What you can do with signing up
0