
質問
データベースのインデックス機能がより効果を発揮するのはどのような場面ですか? |
解答
データベースのインデックス機能がより効果を発揮するのは、以下のような場面です。 ### **1. 大量のデータを検索するとき** **テーブルのレコード数が多い場合**(数万〜数百万件以上) `WHERE` 句で特定の条件に一致するデータを探す場合 インデックスがあると、**フルテーブルスキャンを避けて高速に検索できる** **例:** ```sql SELECT * FROM users WHERE email = 'user@example.com'; ```→ `email` にインデックスがあると、検索速度が大幅に向上 ### **2. `JOIN` を多用するクエリの実行時** テーブル同士を `JOIN` するとき、結合条件のカラムにインデックスがあると高速化 **外部キー(FOREIGN KEY)を使う場合もインデックスが有効** **例:** ```sql SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id; ``` → `customers.id` と `orders.customer_id` にインデックスがあると、`JOIN` のパフォーマンスが向上 ### **3. `ORDER BY` や `GROUP BY` を使用するとき** ソートやグルーピングの対象となるカラムにインデックスがあると、高速に処理できる **例:** ```sql SELECT * FROM sales ORDER BY created_at DESC; ``` → `created_at` にインデックスがあると、**ソート処理が効率的になる** ```sql SELECT category, COUNT(*) FROM products GROUP BY category; ``` → `category` にインデックスがあると、**グルーピングの処理が速くなる** ### **4. `DISTINCT` を使う場合** `DISTINCT` は重複を排除するため、対象カラムにインデックスがあるとパフォーマンスが向上 **例:** ```sql SELECT DISTINCT city FROM customers; ``` → `city` にインデックスがあると、**一意な値の検索が速くなる** ### **5. `LIMIT` を使う場合** `LIMIT` を使用して一部のデータだけ取得するとき、インデックスがあると無駄なスキャンを防げる **例:** ```sql SELECT * FROM logs ORDER BY created_at DESC LIMIT 10; ``` → `created_at` にインデックスがあると、**最新10件を素早く取得可能** ## **インデックスが効果を発揮しにくい場面** **小さなテーブル(数百件程度)** → インデックスのメリットが少なく、逆にオーバーヘッドが増える **頻繁に更新されるテーブル** → `INSERT` や `UPDATE` のたびにインデックスのメンテナンスが発生し、パフォーマンス低下 **`LIKE '%文字列%'` のような検索** → 前方一致 (`LIKE '文字列%'`) ならインデックスが効くが、`%` を前につけると効果が薄れる ## **まとめ** インデックスは、**大量データの検索・結合・ソート・グルーピングの高速化**に有効。 特に `WHERE`・`JOIN`・`ORDER BY`・`GROUP BY`・`DISTINCT` で活用されるが、 **小さなテーブルや頻繁に更新されるデータには不要**な場合もある。 |
![]() |
![]() |
【下記、広告です。クリックいただけると励みになります。】