MySQLでインデックスが貼られているか確認する方法!

MySQLで対象のテーブルにインデックスが貼られているか確認する方法を解説します。SHOW INDEX構文やINFORMATION_SCHEMA STATISTICSテーブルを参照してインデックスが貼られているかどうか確認しましょう。

コンテンツ [表示]

  1. 1MySQLでインデックスが貼られているか確認する方法
  2. 1.1SHOW INDEX構文
  3. 1.2INFORMATION_SCHEMA STATISTICSテーブルを参照する
  4. 1.3まとめ

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テーブルを参照するとその情報を取得することが出来ます。

ぜひ今回の内容を参考にお試しください。

GeekHive採用サイト

関連記事