インデックスとパフォーマンス
インデックスとは?
インデックスは本の索引のようなもので、データの検索を高速化します。
インデックスの作成
-- 単一カラムのインデックス
CREATE INDEX idx_employees_salary ON employees(salary);
-- 複合インデックス
CREATE INDEX idx_employees_dept_salary ON employees(department_id, salary);
インデックスが効果的な場合
- WHERE句で頻繁に使うカラム
- JOIN条件に使うカラム(外部キー)
- ORDER BY で頻繁に使うカラム
EXPLAIN でクエリを分析
SQLiteでは EXPLAIN QUERY PLAN でクエリの実行計画を確認できます。
EXPLAIN QUERY PLAN
SELECT * FROM employees WHERE salary > 500000;
パフォーマンスのベストプラクティス
SELECT *より必要なカラムだけを指定する- N+1問題を避けてJOINを使う
- 大量データには LIMIT を使う
- インデックスのあるカラムで絞り込む
インデックスの確認・削除
-- インデックス一覧
SELECT * FROM sqlite_master WHERE type = 'index';
-- インデックス削除
DROP INDEX idx_employees_salary;
SQL エディタ
練習問題
問題 1
employeesテーブルのsalaryカラムにインデックス idx_emp_salary を作成し、SQLite_masterで確認してください