MySQLでテーブルのインデックスを表示して確認する

MySQLでテーブルのインデックスを表示して確認する

Table of Contents

MySQLでテーブルのインデックスを表示するには、SHOW INDEXステートメントを使います。
SHOW INDEX構文は指定したテーブル内のインデックス情報を表示します。

MySQLのSHOW INDEXステートメントの構文

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]

[]は任意で、{|}はどちらかを選択になります。
{FROM | IN}であればFROMINどちらかを使えます。

INDEXINDEXES、そしてKEYSはどれを選んでも結果は同じです。
INDEXESKEYSINDEXのシノニム(代替名)です。

SHOW INDEXの実行例

USEステートメントでDBhoge_developmentを選択したのちにSHOW INDEXを実行してます。

mysql> show index from tokens;
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table  | Non_unique | Key_name                | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tokens |          0 | PRIMARY                 |            1 | id          | A         |           1 |     NULL | NULL   |      | BTREE      |         |               |
| tokens |          0 | index_tokens_on_value   |            1 | value       | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
| tokens |          1 | index_tokens_on_user_id |            1 | user_id     | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

DB名とテーブル名のFROM句を結合する

db_nametbl_name.で繋ぐことができます。次の2つは同等です。

mysql> show index from users from hoge_development;
mysql> show index from hoge_development.users;

MySQLのSHOW INDEXで表示される項目

項目名 説明
Table テーブル名です。
Non_unique 重複許可を表します。重複可能:1, 重複不可:0
Key_name インデックスの名前。このインデックスが主キーなら、常に PRIMARY です。
Seq_in_index インデックス内のカラムシーケンス番号であり、1から始まります。
Column_name カラム名です。
Collation インデックス内カラムのソート方法。Aなら昇順, NULLならソートされないのどちらかです。
Cardinality インデックス内のユニーク数の推定値。統計値なため必ずしも正確ではない。この値が高いほど結合時にこのインデックス利用可能性が高くなります。
Sub_part カラムが部分的インデックス設定されてるときの文字の数。カラム全体がインデックス設定されている場合は NULLが入ります。
Packed キーがパックされる方法を示します。パックされない場合は NULL。
Null このカラムにNULLを含められるならYES、含められないなら空白が入ります。
Index_type 使用されるインデックス方法 (BTREE、FULLTEXT、HASH、RTREEのいずれかです)。
Comment 各カラムで説明されていないこのインデックスに関する情報
Index_comment このインデックスが作成されたときに COMMENT 属性で設定された任意のコメント。

この中でよく確認したりチューニング時に見る項目は次の項目が多いかと思います。
TableNon_uniqueKey_nameColumn_nameCardinalitySub_partNull

インデックスの条件等を確認するなら、次の項目あたりになります。

  • Table
  • Non_unique
  • Key_name
  • Column_name
  • Null

チューニングでインデックスの状態を確認するなら、次の項目あたりになります。

  • Cardinality
  • Sub_part

SHOW INDEXをWHERE句で表示テーブルを絞る

構文内にあるWHERE句を使うことで表示インデックスを選択できます。
テーブルtokensからKey_nameカラムに対して照合すると次のようになります。

mysql> show index from tokens where Key_name like 'index_%';
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table  | Non_unique | Key_name                | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tokens |          0 | index_tokens_on_value   |            1 | value       | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
| tokens |          1 | index_tokens_on_user_id |            1 | user_id     | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

注意: SHOW INDEXは権限がない場合は表示されない

カラムに対する権限を持っていない場合は、SHOW INDEXの結果に表示されません。

MySQLのmysqlshowコマンドでも取得可能

ターミナル上でmysqlshow -k db_name tbl_nameコマンドを実行することで、テーブルのインデックスを一覧表示できます。

$ mysqlshow -uroot -k hoge_test tokens
Database: hoge_test  Table: tokens
+------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field      | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id         | bigint(20)   |                    | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| value      | varchar(256) | utf8mb4_general_ci | YES  | UNI |         |                | select,insert,update,references |         |
| user_id    | bigint(20)   |                    | YES  | MUL |         |                | select,insert,update,references |         |
| created_at | datetime(6)  |                    | NO   |     |         |                | select,insert,update,references |         |
| updated_at | datetime(6)  |                    | NO   |     |         |                | select,insert,update,references |         |
+------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table  | Non_unique | Key_name                | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tokens | 0          | PRIMARY                 | 1            | id          | A         | 1           |          |        |      | BTREE      |         |               |
| tokens | 0          | index_tokens_on_value   | 1            | value       | A         | 1           |          |        | YES  | BTREE      |         |               |
| tokens | 1          | index_tokens_on_user_id | 1            | user_id     | A         | 1           |          |        | YES  | BTREE      |         |               |
+--------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
このエントリーをはてなブックマークに追加