PostgreSQLのWHERE句に最適なインデックス設計!初心者でもわかる検索高速化の基本
生徒
「データベースで検索するときに、WHEREってよく書いてありますよね?」
先生
「WHERE句は、表の中から条件に合うデータだけを探すための指定です。名簿から年齢が二十歳未満の人だけを探すようなものです。」
生徒
「その検索を速くするのがインデックスなんですか?」
先生
「その通りです。WHERE句とインデックスはとても深い関係があります。」
1. SQLとは何か?
SQLは、データベースという「情報を整理して保存する箱」に命令を出すための言葉です。紙の表に書かれた名簿を想像すると分かりやすいです。SQLを使うと、その名簿から特定の人を探したり、新しい行を追加したりできます。
PostgreSQLは、このSQLを使って操作する代表的なデータベースで、世界中で使われています。
2. WHERE句の役割をやさしく理解する
WHERE句は、「どの条件で探すか」を決める部分です。例えば「年齢が二十歳未満の人だけ」といった指定をします。条件がない場合、表のすべてを最初から最後まで見ることになります。
これは、本を一ページずつ全部めくって探すような状態です。データが増えるほど時間がかかります。
3. インデックスがない場合の検索
まずは、インデックスがない状態のテーブルを見てみましょう。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5 | 伊藤美咲 | 18 | misaki@example.com
SELECT *
FROM users
WHERE age < 20;
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
5 | 伊藤美咲 | 18 | misaki@example.com
この場合、PostgreSQLは全員分を一人ずつ確認してから、条件に合う人を選んでいます。
4. WHERE句に合ったインデックス設計
WHERE句でよく使う列には、インデックスを作るのが基本です。年齢で検索することが多いなら、年齢の列にインデックスを作ります。
CREATE INDEX idx_users_age
ON users(age);
これは「年齢順の索引」を作るイメージです。これで、条件に合う場所へ一気に移動できます。
5. 複数条件のWHERE句とインデックス
WHERE句では、複数の条件を組み合わせることもあります。例えば「名前と年齢」の両方を使う場合です。
SELECT *
FROM users
WHERE name = '山田太郎'
AND age = 25;
このような検索が多いなら、二つの列をまとめたインデックスが効果的です。
CREATE INDEX idx_users_name_age
ON users(name, age);
これは「名前で探してから、その中で年齢を見る」という順番の目次を作る感覚です。
6. インデックスを作りすぎない注意点
インデックスは便利ですが、作りすぎると逆効果になります。データを追加したり変更したりするたびに、インデックスも更新されるからです。
毎日使わない条件にまでインデックスを作ると、管理が大変になります。WHERE句で「よく使う条件」に絞ることが最適な設計です。
7. 初心者でも失敗しない考え方
最初は難しいことを考えなくても大丈夫です。「WHERE句に何を書いているか」を意識するだけで、インデックス設計の第一歩になります。
PostgreSQLのインデックス設計は、よく通る道だけを整備するようなものです。必要な場所だけを整えることで、検索は自然と速くなります。