MySQLでインデックスの一覧を取得する方法【SHOW INDEX / INFORMATION_SCHEMA】
MySQLでは、テーブルに作成されたインデックスを簡単に確認できます。本記事では、「SHOW INDEX」コマンドを使った個別テーブルのインデックス確認方法と、INFORMATION_SCHEMA.STATISTICS テーブルを利用したデータベース全体のインデックス一覧取得方法を、実行例とあわせて解説します。
1. SHOW INDEX コマンドでインデックスを表示する
まずは、特定テーブルのインデックス情報を表示する基本の方法です。MySQLでは SHOW コマンドを使用します。
インデックスを表示するクエリは以下のとおりです。
mysql> SHOW INDEX FROM indexingdemo;
実行結果は次のようになります。
+--------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +--------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | indexingdemo | 1 | indexName | 1 | Name | A | 0 | NULL | NULL | YES | BTREE | | | YES | +--------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 1 row in set (0.17 sec)
この出力には、キー名(Key_name)や対象カラム(Column_name)、インデックスタイプ(Index_type)など、インデックスに関する詳細な情報が含まれています。
2. INFORMATION_SCHEMA.STATISTICS でインデックス一覧を取得する
複数のテーブルに作成されたすべてのインデックスをまとめて確認したい場合は、INFORMATION_SCHEMA.STATISTICS テーブルに対して SELECT DISTINCT を実行するのが便利です。
基本の構文
SELECT DISTINCT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'yourDatabaseName';
実行例
それでは、上記の構文を使って実際にインデックス一覧を取得してみましょう。ここでは「business」というデータベースを指定しています。
mysql> SELECT DISTINCT -> TABLE_NAME, -> INDEX_NAME -> FROM INFORMATION_SCHEMA.STATISTICS -> WHERE TABLE_SCHEMA = 'business';
実行結果
以下のように、データベース内の各テーブルと対応するインデックス名の一覧が表示されます。
+--------------------------+------------------+ | TABLE_NAME | INDEX_NAME | +--------------------------+------------------+ | addcolumntable | Name_Index | | addingautoincrement | PRIMARY | | addingunique | name | | autoincrement | PRIMARY | | autoincrementtable | PRIMARY | | bookindexes | BookName | | childdemo | ConstChild | | clonestudent | idIndex | | clonestudent | NameStuIndex | | college | PRIMARY | | compositeprimarykey | PRIMARY | | demoauto | PRIMARY | | demoindex | PRIMARY | | demoschema | idDemoIndex | | duplicatebookindexes | BookName | | employeeinformation | PRIMARY | | foreigntable | constFKPK | | foreigntabledemo | FKConst | | functionindexdemo | indFirstName | | indexingdemo | indexName | | keydemo | PRIMARY | | lastinsertrecordiddemo | PRIMARY | | multipleindexdemo | id | | nextiddemo | PRIMARY | | parentdemo | PRIMARY | | primarytable | PRIMARY | | primarytable1 | PRIMARY | | primarytabledemo | PRIMARY | | schemadatabasemethoddemo | PRIMARY | | sequencedemo | PRIMARY | | student | idIndex | | student | NameStuIndex | | studentenrollment | StudCollegeConst | | tabledemo2 | ConstFK | | tabledemo3 | ConstFK | | tablepri | PRIMARY | | tblf | ConstFK | | tblp | PRIMARY | | transcationdemo | PRIMARY | | triggedemo | PRIMARY | | uniqueautoid | id | | uniqueconstdemo | name | | uniquedemo | name | | uniquedemo1 | id | | updtable | PRIMARY | | usernameandpassworddemo | PRIMARY | | usernameandpassworddemo | UserId | +--------------------------+------------------+ 47 rows in set (0.07 sec)
このように、TABLE_NAME と INDEX_NAME を組み合わせて取得することで、データベース全体のインデックス構成を一目で把握できます。
まとめ
- 単一テーブルの詳細確認:
SHOW INDEX FROM テーブル名; - データベース全体の一覧取得:
INFORMATION_SCHEMA.STATISTICSへの SELECT クエリ
用途に応じて使い分けることで、インデックスの管理やパフォーマンスチューニングが効率的に行えます。
-
MySQLで主キー(プライマリーキー)を削除する方法をわかりやすく解説
MySQLでテーブルから主キー(プライマリーキー)を削除するには、ALTER TABLE文を使用します。DROP PRIMARY KEY句を組み合わせることで、既存の主キーを簡単に削除できます。 基本構文 ALTER TABLE テーブル名 DROP PRIMARY KEY; それでは、実際にサンプルテーブルを使って手順を確認していきましょう。 手順1:サンプルテーブルを作成する まず、主キーを持つテーブルを作成します。 mysql> CREATE TABLE DemoTable -> ( -> StudentId int NOT NULL, -
-
MySQLでカラムが主キー(PRIMARY KEY)かどうかを確認する方法
MySQLにおいて、特定のカラムが主キー(プライマリキー)であるかどうかを確認したい場合は、information_schema.columnsテーブルのCOLUMN_NAMEとCOLUMN_KEY=PRIを活用します。これにより、テーブル内のどのカラムが主キーとして設定されているのかを簡単に判定できます。基本構文カラムが主キーかどうかを判定するための基本的な構文は以下の通りです。SELECT column_name, CASE WHEN column_key = PRI THEN メッセージ1 ELSE メッセージ2