MySQL 登録されている索引の一覧を出力する
MySQLにて、登録されている索引を確認する方法としては
mysql > show index from TABLE_NAME;
で確認できます。しかしこれですと全てのスキーマ内に存在する全ての索引を確認することができません では、索引が設定されているかいないかわからないテーブルの索引のみを探したすのはどう すすれば良いのか?
information_schema.STATISTICS テーブルを確認することですべてのテーブルに設定されている索引を確認することができます
mineo エントリーパッケージ au/ドコモ対応SIMカード データ通信/音声通話 (ナノ/マイクロ/標準SIM/VoLTE)
- 出版社/メーカー: ケイ・オプティコム
- 発売日: 2015/03/27
- メディア: エレクトロニクス
- この商品を含むブログ (13件) を見る
話は変わりますが
IBM DB2では、システム系のスキーマを、SYSCAT スキーマで管理しております。SYSCATスキーマは、 読んで字のごとくシステムカタログ系のスキーマです。(厳密には、SYSIBMスキーマのVIEW) このようなものを、MySQLではどこで管理しているのか?ですが、INFORMATION_SCHEMAという スキーマで管理しております。
IBM DB2の索引情報ってすっごく見やすくて、以下のようなSQLを投げるだけで登録している索引の一覧を出力することができます。
・ IBM DB2で登録されている、索引の一覧を表示するSQL
SELECT TABSCHEMA, TABNAME, INDNAME, UNIQUERULE, COLNAMES FROM SYSCAT.INDEXES ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME;
以下MySQLでの索引一覧をIBMのSYSCAT.INDEXESのように表示するSQLです
SELECT X.TABLE_SCHEMA AS TABSCHEMA, X.TABLE_NAME AS TABNAME, X.INDEX_NAME AS INDNAME, X.UNIQUERULE AS UNIQUERULE, rtrim(group_concat(concat(X.COLLATION,X.COLUMN_NAME) order by X.SEQ_IN_INDEX asc SEPARATOR '')) as COLNAMES FROM ( SELECT Y.TABLE_SCHEMA, Y.TABLE_NAME, Y.INDEX_NAME, case Y.NON_UNIQUE WHEN 0 then IF (Y.INDEX_NAME = 'PRIMARY','P','U') else 'D' end as UNIQUERULE, case when Y.COLLATION = 'A' then '+' when Y.COLLATION = 'D' then '-' else '*' end as COLLATION, Y.COLUMN_NAME, Y.SEQ_IN_INDEX from ( select * from information_schema.STATISTICS ) as Y where Y.TABLE_SCHEMA <> 'mysql' order by Y.TABLE_SCHEMA, Y.TABLE_NAME, Y.INDEX_NAME, Y.SEQ_IN_INDEX ) as X group by X.TABLE_SCHEMA, X.TABLE_NAME, X.INDEX_NAME, X.UNIQUERULE order by X.TABLE_SCHEMA, X.TABLE_NAME, X.INDEX_NAME;
- 上記SQLを実行した結果は以下の通りです(一部抜粋)
+-----------+-----------------------------+---------------------------+------------+------------------------------------| TABSCHEMA | TABNAME | INDNAME | UNIQUERULE | COLNAMES +-----------+-----------------------------+---------------------------+------------+----------------------------------- | wp_squad | events_rec | PRIMARY | P | +event_id | | wp_squad | test_users | PRIMARY | P | +id | | wp_squad | wp_commentmeta | comment_id | D | +comment_id | | wp_squad | wp_commentmeta | meta_key | D | +meta_key | | wp_squad | wp_commentmeta | PRIMARY | P | +meta_id | | wp_squad | wp_comments | comment_approved | D | +comment_approved | | wp_squad | wp_comments | comment_approved_date_gmt | D | +comment_approved+comment_date_gmt | | wp_squad | wp_comments | comment_date_gmt | D | +comment_date_gmt | | wp_squad | wp_comments | comment_parent | D | +comment_parent | | wp_squad | wp_comments | comment_post_ID | D | +comment_post_ID | | wp_squad | wp_comments | idx01_wp_comments | D | +comment_post_ID | | wp_squad | wp_comments | idx02_wp_comments | D | +comment_post_ID+comment_date_gmt | | wp_squad | wp_comments | PRIMARY | P | +comment_ID | | wp_squad | wp_ktaisession | PRIMARY | P | +sid | | wp_squad | wp_links | link_visible | D | +link_visible | | wp_squad | wp_links | PRIMARY | P | +link_id | | wp_squad | wp_options | idx01_wp_options | D | +autoload | | wp_squad | wp_options | option_name | U | +option_name |
これが、DB2のSYSCAT.INDEXESの出力結果とほぼ同様です。簡単に説明すると TABSCHEMA・・スキーマ名 TABNAME・・・テーブル名 IDNAME・・・インデクス名 UNIQUERULE・・ユニークか否か(P: プライマリ U:ユニーク D:非ユニーク) COLNAMES・・・索引に設定されているカラムです"+"が照準、"-"が降順です・・が、MySQLの索引は降順というインデクス の登録はできませんので、オマケです
以上、おためしあれ。