MySQL のインデックスの一覧を取得する
ここでは MySQL でデータベース内のインデックスの一覧を取得する方法をご説明します。
INFORMATION_SCHEMA.STATISTICS でインデックスの一覧を取得する
MySQL の INFORMATION_SCHEMA.STATISTICS システムビューから、インデックスの一覧を取得することができます。
INFORMATION_SCHEMA.STATISTICS は、システム用のデータベースも含め、全データベースのインデックスを返します。
SELECT *
FROM INFORMATION_SCHEMA.STATISTICS;
[実行結果]
主なカラムの意味は以下の通りです。
- TABLE_SCHEMA: データベース名
- TABLE_NAME: テーブル名
- NON_UNIQUE: ユニークかどうか。 0 ならユニーク。
- INDEX_NAME: インデックス名
- COLUMN_NAME: カラム名
データベースを指定するには TABLE_SCHEMA = 'データベース名' のようにフィルターします。
インデックス名でフィルターするには、INDEX_NAME カラムを使ってフィルターできます。
例えば、INFORMATION_SCHEMA.STATISTICS から school_db データベースの、名前に student というキーワードが含まれるインデックスを取得するには次のようにできます。
SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE INDEX_SCHEMA = 'school_db'
AND INDEX_NAME LIKE '%student%';
[実行結果]
school_db データベースの 名前に student というキーワードが含まれるインデックスの一覧が取得できています。
idx_examid_studentid という名前のインデックスは、exam_results テーブル の exam_id と student_id に対するユニークインデックスです。
このようにカラム二つに対するインデックスは 2 行で表示され、SEQ_IN_INDEX が、1、2、のようになっています。
SHOW INDEX でインデックスの一覧を取得する
MySQL の SHOW INDEX 文を使っても、テーブルのインデックスの一覧を取得することができます。
SHOW INDEX FROM [テーブル名] と実行すると、今選択されているデータベースの指定したテーブルのインデックスの一覧を取得できます。
例えば、school_db データベースを選択した状態で、exam_results テーブルのインデックスを確認するには次のようにできます。
SHOW INDEX FROM exam_results;
[実行結果]
データベースを指定して、インデックスの一覧を取得したい時は、SHOW INDEX FROM [テーブル名] FROM [データベース名] のよう指定することができます。
例えば school_db が選択されている状態でも、sys データベースの sys_config テーブルのインデックスの一覧を取得したい時は次のようにできます。
SHOW INDEX FROM sys_config FROM sys;
[実行結果]
MySQL Workbench でインデックスを確認・生成・削除する
MySQL Workbench の Schema タブの [Database] > [Tables] > [テーブル名] > [Indexes] でも、そのテーブルのインデックスを確認することができます。
インデックスを選択して右クリックし、[Create Index] を選択します。
選択したテーブルの indexes の編集画面が開きますので、ここでインデクスの詳細を確認したり、インデックスの生成や削除を行えます。
以上、MySQL でデータベース内のインデックスの一覧を取得する方法をご説明しました。