2026年9月2日
2026年9月2日
MySQLのインデックスの作成と最適化方法
ステップ1: インデックスの作成
# インデックスを追加するテーブル名と列名を指定します。ここではidカラムとnameカラムにインデックスを作成します。
mysql> ALTER TABLE users ADD INDEX idx_id_name (id, name);
# 複数の列に対してインデックスを作成したい場合は、列名をカンマ区切りで指定します。
ステップ2: インデックスの最適化
# 一部の列にだけインデックスを作成したい場合、WHERE句を使用して条件付きインデックスを作成します。
mysql> ALTER TABLE orders ADD INDEX idx_order_status (status) WHERE status = 'completed';
# ランダムなデータでインデックスをテストするためにINSERT文を使用します。
mysql> INSERT INTO users (id, name, email) VALUES (10001, 'test', 'test@example.com');
# 既存のインデックスを削除するには、DROP INDEXを使用します。
mysql> ALTER TABLE users DROP INDEX idx_id_name;
ステップ3: インデックスの状態確認
# SHOW INDEXESからテーブル全体のインデックス情報を表示します。
mysql> SHOW INDEX FROM orders;
# 特定のインデックスについて詳細を取得するには、INDEX统计信息 INFROM INFORMATION_SCHEMA.STATISTICSを使用します。
mysql> SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'users' AND COLUMN_NAME = 'id';
ステップ4: 実践とトラブルシュート
# 作成したインデックスの効果を検証するために、実際のクエリを実行します。
mysql> EXPLAIN SELECT * FROM users WHERE id > 10000;
注意事項
- インデックスは適切に管理されないと、データベースのパフォーマンスを悪化させる可能性があります。インデックス数は少ない方が良いです。
- INSERTやUPDATE操作でインデックスの更新が必要になるため、これらの操作が頻繁なテーブルにはあまり効率的ではありません。
- インデックスが存在する列での比較演算子(=, <, >)を使用したWHERE句は効果的ですが、LIKE '%...%'やORDER BYの使用は避けるべきです。
まとめ
1. インデックスの作成: 必要なテーブルと列に適切なインデックスを作成します。
2. 最適化: インデックスを削除または更新することで、不要なインデックスを排除し効率性を高めます。
3. 状態確認: SHOW INDEXやINFORMATION_SCHEMAを使用して、現在のインデックス状態を確認します。
4. 実践とトラブルシュート: EXPLAINを使用してクエリの効率を評価し、必要な改善を行います。
関連記事: