Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL スキーマ内に存在する全ての索引を一括で抽出するSQL

mysql でテーブルの索引がどう設定されているのか知りたいときがあると思うのですが。その場合、

mysql>
show index from TABLE_NAME;

で確認できます

でわ、スキーマ内の全てのテーブルの索引を抜き出したい場合はどうするか? というわけでinformation_schemaを利用して対象データベースに登録されている全ての索引を一括で抽出するSQLを考えてみました。 索引の情報は、information_schema.STATISTICSに格納されているらしく、以下のSQLで確認できました。

f:id:hit10231023:20180309104332j:plain

索引一覧抽出SQL

mysql>
SELECT
  TABLE_SCHEMA,
  TABLE_NAME,
  INDEX_NAME,
  COLUMN_NAME,
  SEQ_IN_INDEX
FROM
  information_schema.STATISTICS
WHERE
  TABLE_SCHEMA = 'データベース名' 
ORDER BY TABLE_SCHEMA,TABLE_NAME,INDEX_NAME,SEQ_IN_INDEX
-- INTO OUTFILE "/tmp/index_list.csv"
-- FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
;