【入門編】 複数列インデックス – PostgreSQL

「本棚」で学ぶ、PostgreSQLの複数列インデックスの秘密

こんにちは!データベースの世界へようこそ。
日々PostgreSQLと向き合っていると、「あれ、インデックスを貼ったはずなのに、なんで検索が遅いの?」という壁にぶつかること、ありますよね。

特に「複数列インデックス(複合インデックス)」は、慣れるまではちょっとしたパズルみたいに感じるかもしれません。でも大丈夫。今日は、一番身近な「本棚」を例にして、この仕組みを紐解いていきましょう!

—

1. インデックスは「索引」ではなく「並び順」

まず、皆さんにイメージしてほしいのは、巨大な図書館の整理です。
PostgreSQLのインデックスは、単なるメモ帳ではなく、「データがそのルール通りに物理的に並んでいる状態」だと思ってください。

例えば、あるテーブルに「名字」と「名前」の列があるとします。ここに `(名字, 名前)` という複数列インデックスを作ると、本棚にはこんな順番で本が並ぶことになります。

  • 佐藤・愛
  • 佐藤・健一
  • 鈴木・一郎
  • 鈴木・花子

これ、なんとなく法則が見えてきませんか?

—

2. 「左端一致の原則」という名のルール

ここで非常に重要なのが、「左側から順番に絞り込んでいく」というルールです。これを専門用語で「左端一致」と呼びますが、要は「大きなカテゴリーから先に決めてね」ということです。

なぜ左からじゃないとダメなの?

想像してみてください。あなたが「名前」だけを頼りに特定の誰かを探そうとしたとき、この本棚はどう役に立つでしょう?

「名前が『一郎』の人を探して!」と言われても、この本棚は「名字」順に並んでいるので、一郎さんが「佐藤」さんなのか「鈴木」さんなのか分からないと、最初から最後まで全部の棚をチェックしないといけませんよね。これじゃあ、インデックスの意味がありません。

でも、「名字が『鈴木』で、名前が『一郎』の人」ならどうでしょう?
1. まず「鈴木」のエリアに直行する。
2. その中から「一郎」さんを探す。

これなら、一瞬で目的の本にたどり着けますよね。これが、「左端(名字)から指定すること」の魔法なんです。

—

3. 列の「並び順」で戦略が変わる

複数列インデックスを作るとき、どの列を左にするかは、普段どんな検索をすることが多いかで決まります。

  • 名字で検索することが多いなら: `(名字, 名前)`
  • 名前で検索することが多いなら: `(名前, 名字)`

もし、インデックスを `(名字, 名前)` で作ってしまった後に、「名前だけで検索したい!」という要望が爆発的に増えたら……残念ながら、そのインデックスはあまり役に立たなくなってしまいます。

だからこそ、設計するときは「一番よく検索条件に使う列を一番左に持ってくる」のが、データベースエンジニアとしての腕の見せ所なんですよ。

—

今日のまとめ:インデックスを設計するヒント

初心者の方がまず押さえておくべきポイントは、この3つだけ!

  • インデックスは「左から」が鉄則!:一番左の列を含まない検索だと、インデックスは無視されがちです。
  • 「絞り込み」に使う順に並べる:一番大きなカテゴリー(例:都道府県や名字など)を左側にしましょう。
  • 欲張りすぎない:全部の列をインデックスに入れればいいわけではありません。必要な時に、必要な順で。

データベースの設計は、まるで整理整頓と同じです。「次にどんな探し方をするかな?」と想像するだけで、システムは劇的に速くなります。

最初は難しく感じるかもしれませんが、少しずつ「並び順」を意識するだけで、きっとPostgreSQLともっと仲良くなれるはずですよ!

また次回の記事でも、現場で使えるちょっとしたコツをお話ししますね。それでは、楽しいエンジニアライフを!

コメント

タイトルとURLをコピーしました