MySQLで貼られているINDEXを確認する方法
MySQLでテーブルに貼られているインデックスを確認する方法には、主に以下の方法があります。
1. SHOW INDEX コマンドを使用する方法
MySQLでは、SHOW INDEX コマンドを使って特定のテーブルに適用されているインデックスの情報を確認することができます。
このコマンドを実行すると、テーブル内の各インデックスに関する詳細な情報が表示されます。
SHOW INDEX FROM テーブル名;
このコマンドは、指定したテーブルに貼られているインデックスに関する以下のような情報を返します。
- Table:
インデックスが貼られているテーブル名
- Non_unique:
インデックスがユニークかどうか(0はユニーク、1はユニークでない)
- Key_name:
インデックスの名前
- Seq_in_index:
インデックス内のカラムの順序
- Column_name:
インデックスが適用されているカラム名
- Collation:
カラムのソート順(Aは昇順、NULLはなし)
- Cardinality:
インデックスで行うカラムの異なる値の推定数
- Sub_part:
インデックスが部分的に適用されている場合、そのバイト数
- Packed:
インデックスが圧縮されているかどうか
- Null:
インデックス内でカラムがNULL値を許可するかどうか
- Index_type:
使用されているインデックスのタイプ(BTREE, HASH, FULLTEXTなど)
たとえば、users テーブルに貼られているインデックスを確認する場合、次のように実行します。
SHOW INDEX FROM users;
これにより、users テーブルに存在するインデックスの一覧が表示されます。
2. EXPLAIN コマンドを使用する方法
EXPLAIN コマンドは、クエリがどのように実行されるかを調べるためのものであり、実行計画の一部として使用されているインデックスの情報も確認できます。
このコマンドは、特にクエリのパフォーマンスチューニングを行う際に役立ちます。
EXPLAIN SELECT * FROM テーブル名 WHERE 条件;
たとえば、users テーブルの特定のユーザーを検索するクエリに対してインデックスが使用されているか確認するには、次のように実行します。
EXPLAIN SELECT * FROM users WHERE id = 1;
このコマンドは、クエリにどのインデックスが使用されているか、クエリの実行計画を示します。
結果として、次のような情報が返されます。
- id:
クエリ内のSELECT文の識別子
- select_type:
SELECT文のタイプ(通常はSIMPLE)
- table:
データが取得されるテーブル名
- type:
ジョインのタイプ(ALL, INDEX, RANGE, REF, EQ_REF, CONST, NULLなど)
- possible_keys:
クエリで使用可能なインデックスの候補
- key:
実際に使用されたインデックス
- key_len:
使用されたインデックスの長さ
- ref:
使用されたカラムや定数
- rows:
検索される可能性がある行数の推定値
- filtered:
条件を満たす行の割合(フィルタリングされた行の割合)
- Extra:
追加の情報(たとえば、Using index や Using where など)
EXPLAIN はインデックスの有無に関する情報だけでなく、インデックスがどのように使用されているかを詳細に理解するためにも利用できます。
3. INFORMATION_SCHEMAを使用する方法
MySQLには、INFORMATION_SCHEMA というデータベースメタデータを格納する仮想テーブルがあり、ここからインデックスに関する情報を取得することもできます。
INFORMATION_SCHEMA.STATISTICS テーブルを使用して、特定のテーブルに存在するインデックスを確認することが可能です。
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'データベース名' AND TABLE_NAME = 'テーブル名';
このクエリを実行すると、指定したデータベースとテーブルに関するインデックス情報が返されます。
このテーブルには次のようなカラムが含まれています。
- TABLE_SCHEMA:
テーブルが属しているデータベースの名前
- TABLE_NAME:
テーブル名
- NON_UNIQUE:
インデックスがユニークかどうか
- INDEX_NAME:
インデックスの名前
- SEQ_IN_INDEX:
インデックス内でのカラムの位置
- COLUMN_NAME:
インデックスが適用されているカラムの名前
- COLLATION:
インデックス内のカラムのソート順
- CARDINALITY:
カラムの異なる値の推定数
- INDEX_TYPE:
インデックスのタイプ(BTREE, HASH, FULLTEXTなど)
この方法は、データベース全体でのインデックス状況を把握したい場合や、スクリプトを用いてインデックス情報を抽出したい場合に便利です。
まとめ
MySQLでテーブルに貼られているインデックスを確認する方法には、SHOW INDEX コマンド、EXPLAIN コマンド、そして INFORMATION_SCHEMA.STATISTICS テーブルの利用という3つの主要な手段があります。
これらを使い分けることで、インデックスの状態やクエリ実行時にインデックスがどのように使われているかを把握し、パフォーマンス向上に役立てることができます。