インデックスとは
データベースの検索を速くするもののことです。
言い換えると見出しのことです。
インデックスの作成
下のようなデータがあったとします。
⚫︎会社テーブル
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.youtube.com/watch?v=iIoq-3veMYk&list=PL-1KBX2gDRujQaRgEByueezHBiqHP8KDD&index=8