【いんでっくす】

インデックス(DB) とは?

最終更新:
💡 探す手がかりを用意する、DBの索引

テーブルの行を探しやすくする補助的なデータ構造。本の索引に似た役割があり、検索の条件や件数によって有効性が変わり、保存領域と更新の負担も必要です。

📌 このページのポイント
DBの索引:行を探す手がかり商品番号42を探す例全体を調べる索引で絞る番号10番号24番号42番号58索引42 → 行の場所該当する商品行保存領域と、更新の負担も必要使うかどうかは、DBが計画で選ぶ
索引から行を探す模式図。索引を使わず全体を読む方が効率的な場合もあります。固定の高速化率を示す図ではありません。
ひよこ ひよこ
索引があると、何が変わるの?
ペンギン先生 ペンギン先生
全ての行を調べる代わりに、索引から条件に合う行の場所を探せる場合があるよ。例えば商品番号42で商品を探すときの手がかりを用意するイメージ。CREATE INDEXで作成でき、DBが内容を更新してくれるんだ。
ひよこ ひよこ
作れば、必ず速くなるの?
ペンギン先生 ペンギン先生
そうとは限らないよ。表が小さい、たくさんの行を返すなどの場合、全体を順に読む方が効率的なこともある。DBは統計などを基に実行方法を選ぶ。何秒になるかも、件数・条件・機器などで変わるんだ。
ひよこ ひよこ
全部の列に作った方がよい?
ペンギン先生 ペンギン先生
索引も保存領域を使い、データ更新に合わせて保つ負担があるよ。よく使う検索や結合、並べ替えの条件を見て検討しよう。B-treeなど種類ごとに得意な条件も違うから、単に数を増やせばよいわけではないんだ。
ひよこ ひよこ
使われているか、どう調べるの?
ペンギン先生 ペンギン先生
PostgreSQLならEXPLAINで実行計画を見られるよ。EXPLAIN ANALYZEは実際にSQLを動かして時間や件数を調べるので、更新SQLや負荷の大きいSQLでは実行の影響に注意しよう。実際のデータと条件で、速度だけでなく更新への負担も確かめたいね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DBのインデックス」って出てきたら「データの行を探しやすくする索引」と思えばだいたいOK!
📖 おまけ:英語の意味
「Index」 = 索引
💬 本の索引が語句から掲載ページへ案内するように、DBでは値などから行を探す手がかりを用意します。実際のデータ構造や検索の仕方は索引の種類によって異なります。

参考資料

← 用語集にもどる