Webエンジニアのメモ帳

技術的な話を中心に書いています。

【MySQL】インデックスについて

MySQLなどのようなRDB(Relational DataBase)にはインデックスというものがあります。

この記事では、インデックスについて説明します。

インデックスとは

一言で言えば、インデックスとは索引のようなものです。(英語のindex自体が索引という意味です。)

例として、以下のようなテーブルを考えます。テーブル名はpersonとし、IDを主キーとします。

ID NAME AGE
001 山本 25
002 田中 23
003 鈴木 30

このとき、25歳以上の全員の名前を知りたいとします。以下のSQLを実行すれば取得できますね。

SELECT name FROM person WHERE age >= 25;

今回はデータが3件しかありませんが、全データをチェックしないといけないため、データが多いと処理に時間がかかります。

そこで、あらかじめ年齢で並び替えておけば早く処理できる、というのがインデックスの考え方です。

正確には、「このテーブルのデータを年齢で並び替えればこの順番になる」というような情報を記憶するものがインデックスです。テーブルの情報を丸々コピーして保持するわけではありません。

インデックスの作り方

例えば上記のテーブルで年齢に関してインデックスを作成する場合、以下のSQLを実行します。

インデックスの名前はage_indexとします。

CREATE INDEX age_index on person (age);

インデックスを作成しておくことで、ある年齢以上や以下の人の情報を取得したり、年齢順に並び替えて表示したりといった処理が早くできるようになります。

インデックスのメリット・デメリット

インデックスを作成すればディスクの容量を消費しますから、むやみやたらと作成すれば良いというものではありません。

しかし、特定のカラムを使ってデータを取り出したりすることが多いような場合は、インデックスを作成することで処理の高速化が望めます。

場合に応じてインデックスを活用しましょう。