インデックスとは何か
メニューを表示するにはスワイプしてください
インデックスは、データベースがテーブル全体をスキャンすることなく、行を高速に検索・取得できるようにする特別なデータ構造。書籍の索引のような役割を果たし、すべてのページを読む代わりに、索引から目的のトピックを素早く見つけて該当ページにジャンプできる仕組み。SQLデータベースにおいても、インデックスは1つまたは複数のカラムの値に基づいて、データベースが行を迅速に特定できるようにする。
たとえば、productsテーブルに数千行のデータがあり、nameで商品を検索する場合を考える。インデックスがない場合、データベースはすべての行のname値を確認する必要があり、これをフルテーブルスキャンと呼ぶ。テーブルが大きくなるほど、この処理は遅くなる。nameカラムにインデックスを作成することで、特定の名前に一致する行を素早く見つけるためのショートカットをデータベースに提供できる。
12345678-- Drop the index if it already exists to avoid errors DROP INDEX IF EXISTS idx_products_name; -- Create an index on the name column of the products table CREATE INDEX idx_products_name ON products(name); -- Test: Query using the indexed column to retrieve a product by name SELECT * FROM products WHERE name = 'Apple iPhone 14';
このインデックスを作成すると、SELECTカラムで商品を絞り込むnameクエリは、インデックスを利用して一致する行をより高速に検索できる。たとえば、SELECT * FROM products WHERE name = 'Apple iPhone 14';のようなクエリはインデックスの恩恵を受ける。すべての行を確認するのではなく、データベースはインデックスを使ってnameが一致する行に直接アクセスでき、クエリに必要な時間やリソースを削減できる。
ただし、インデックスは頻繁に検索や絞り込み、JOIN条件で使用されるカラムに対して最も効果的である点に注意が必要。インデックスを作りすぎたり、ほとんど使われないカラムにインデックスを設定したりすると、INSERT、UPDATE、DELETEなどの操作時にインデックスの更新も必要となり、かえってパフォーマンスが低下する場合がある。
1. インデックスの主な目的は何ですか?
2. どのような列にインデックスを作成することを検討すべきですか?
3. インデックスは特定の操作を遅くすることがありますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください