MySQLでインデックスが貼られているか確認する方法!
MySQLで対象のテーブルにインデックスが貼られているか確認する方法を解説します。SHOW INDEX構文やINFORMATION_SCHEMA STATISTICSテーブルを参照してインデックスが貼られているかどうか確認しましょう。
MySQLでインデックスが貼られているか確認する方法
MySQLでテーブルにインデックスが貼られているか確認する方法を解説していきます。インデックスを確認する方法は大きくわけて2種類あります。
SHOW INDEX構文
MySQLのSHOW INDEX
構文を使うことで指定したテーブルに対してのインデックスを確認することが出来ます。
SHOW INDEX構文
SHOW INDEX FROM テーブル名;
SHOW INDEX
構文の結果は下記のようになります。
SHOW INDEX構文の結果
mysql> SHOW INDEX FROM users;
+-------+------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| users | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | | YES | NULL |
| users | 0 | index_users_on_reset_password_token | 1 | reset_password_token | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| users | 0 | index_users_on_invitation_token | 1 | invitation_token | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| users | 1 | index_users_on_invited_by_type_and_invited_by_id | 1 | invited_by_type | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| users | 1 | index_users_on_invited_by_type_and_invited_by_id | 2 | invited_by_id | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| users | 1 | index_users_on_invitations_count | 1 | invitations_count | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| users | 1 | index_users_on_invited_by_id | 1 | invited_by_id | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
+-------+------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
7 rows in set (0.01 sec)
users
テーブルに対してSHOW INDEX構文でインデックスを表示させました。今回の例ではusers
テーブルに対して貼られている全7種類のインデックスが表示されました。
逆に何もデータが表示されなければ、そのテーブルにはインデックスが貼られていない事になります。
INFORMATION_SCHEMA STATISTICSテーブルを参照する
INFORMATION_SCHEMA STATISTICS
テーブルを参照してインデックスを確認する方法もあります。下記のSQLを見てみましょう。
INFORMATION_SCHEMA STATISTICSテーブルを参照
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='スキーマ名' AND TABLE_NAME='テーブル名'
上記の結果の一例は下記のようになります。
+---------------+--------------+------------+------------+--------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | NON_UNIQUE | INDEX_SCHEMA | INDEX_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULLABLE | INDEX_TYPE | COMMENT | INDEX_COMMENT | IS_VISIBLE | EXPRESSION |
+---------------+--------------+------------+------------+--------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| def | qumeru | users | 0 | qumeru | index_users_on_invitation_token | 1 | invitation_token | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 1 | qumeru | index_users_on_invitations_count | 1 | invitations_count | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 1 | qumeru | index_users_on_invited_by_id | 1 | invited_by_id | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 1 | qumeru | index_users_on_invited_by_type_and_invited_by_id | 1 | invited_by_type | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 1 | qumeru | index_users_on_invited_by_type_and_invited_by_id | 2 | invited_by_id | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 0 | qumeru | index_users_on_reset_password_token | 1 | reset_password_token | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
| def | qumeru | users | 0 | qumeru | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | | YES | NULL |
+---------------+--------------+------------+------------+--------------+--------------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
7 rows in set (0.00 sec)
先ほどと同じusers
テーブルに絞り込み、インデックスを含む全カラムを表示させています。今回も前回と同様7種類の結果が返ってきました。
ここに何も表示されなければ、該当テーブルにはインデックスが貼れれていない事になります。
まとめ
いかがでしたでしょうか。テーブルに貼られているインデックスはSHOW INDEX
構文またはINFORMATION_SCHEMA STATISTICS
テーブルを参照するとその情報を取得することが出来ます。
ぜひ今回の内容を参考にお試しください。
