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を使用してクエリの効率を評価し、必要な改善を行います。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ