MySQLにおけるインデックス作成・削除・一覧表示方法

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 本稿では MySQL Server におけるインデックスの作成・削除・一覧の表示方法について解説します。

インデックスを作成する

 インデックスの作成は CREATE INDEX 構文で行います。 初歩的な構文はつぎの通りです。

CREATE INDEX インデックス名 ON テーブル名(カラム名1, カラム名2, ...);

考慮したいこと/覚えておきたいこと

  • インデックス名には、インデックスであることがわかる名前を付けると良いでしょう。 筆者の経験だと「idx」だとか「index」などをインデックス名に含めているプロジェクトを良く目にします。
  • 主キー(PRIMARY KEY)およびユニーク制約を与えているカラムに対しては、インデックスを作成する必要はありません。 テーブルの参照においては、主キーやユニークインデックスによる検索の方が圧倒的に早いです。 (逆に言えば、カラムに主キーやユニーク制約を指定できるのであれば、パフォーマンス的には絶対に指定した方が良いです。)
  • インデックスは、データの条件絞り込みだけに使われるわけではありません。 データの並び替え(ソート)にも利用されます。 よって、絞込み条件に利用しなくても ORDER BY 句で指定することがあるカラムには、インデックスを作成した方が良いでしょう。

インデックスを削除する

 インデックスの削除は、次のように DROP INDEX 構文で行います。

DROP INDEX インデックス名 ON テーブル名;

削除するインデックス名をど忘れしてしまっている場合は、次のインデックスの一覧を表示する方法で確認しましょう。

インデックスの一覧を表示する

 MySQL では、作成したインデックスの情報は information_schema データベースの statistics テーブルで管理しています。 特定のデータベース内にあるインデックスは、次のような SQL で確認することができます。

SELECT table_schema, table_name, index_name, column_name, seq_in_index
FROM information_schema.statistics
WHERE table_schema = "データベース名";

※information_schema データベースを参照する権限を持っている必要がありますのでご注意ください。

おわりに

 ざっとですが、MySQL におけるインデックスの操作方法についてまとめました。

MySQL 入門へ戻る

MySQLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca