インデックスの一覧とインデックスに関する情報を取得する

MySQL では作成済のインデックスの一覧や、インデックスに関する情報を取得する方法として INFORMATION_SCHEMA.STATISTICS テーブルを参照する方法と SHOW INDEX 文を使用する方法が用意されています。ここでは MySQL でインデックスの一覧とインデックスに関する情報を取得する方法について解説します。

(Last modified: )

INFORMATION_SCHEMA.STATISTICSテーブルを参照する

現在作成されているインデックスの一覧を取得する方法です。 INFORMATION_SCHEMA データベースの中の STATISTICS テーブルを参照します。

では試してみます。次のような 2 つのテーブルを作成したあと、 1 つめのテーブルにはインデックスを作成し、 2 つめのテーブルにはプライマリーキーを設定しました。

create table user(id int, name varchar(10)); create index id_index on user(id);

create table staff(id int, name varchar(10)); alter table staff add primary key (id);

INFORMATION_SCHEMA.STATISTICSテーブルを参照する(1)

作成したインデックスの情報を取得します。今回はインデックスが作成されたデータベース名、テーブル名、カラム名、そしてインデックス名を取得してみます。

select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, INDEX_NAME from INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA='mydb';

INFORMATION_SCHEMA.STATISTICSテーブルを参照する(2)

WHERE 句で指定したデータベースで作成されているインデックスの一覧を取得することができました。

なお INFORMATION_SCHEMA データベースの中の STATISTICS テーブルで参照できるインデックスに関するすべての情報は次の通りです。

select * from INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA='mydb' and TABLE_NAME='user' and INDEX_NAME='id_index'\G

INFORMATION_SCHEMA.STATISTICSテーブルを参照する(3)

SHOW INDEX 文を使用する

作成済みのインデックスに関する詳細な情報は SHOW INDEX 文でも参照することができます。書式は次の通りです。

SHOW [EXTENDED] INDEX [FROM] tbl_name [FROM db_name] [WHERE expr]

では実際に試してみます。先ほど作成した user テーブルについて情報を取得してみます。

show index from user\G

インデックスに関する詳細な情報を参照する(1)

作成済みのインデックスの一覧とインデックスの詳細を取得することができました。 INFORMATION_SCHEMA.STATISTICS テーブルを参照して取得できる情報とほぼ同じです。

-- --

作成済みのインデックス一覧とインデックスに関する詳細な情報を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。