CREATE INDEX文とALTER TABLE ADD INDEX文の比較(MySQL)
はじめに
このページでは、MySQLのCREATE INDEX
文とALTER TABLE ADD INDEX
文の2つはどちらもテーブルにインデックスを追加するために使用されますが、それらの違い、特にパフォーマンスに関して記述します。
CREATE INDEX
について
CREATE INDEX
文は、既存のテーブルにインデックスを追加するために使用されます。
このコマンドを使うと、特定の列または列の組み合わせにインデックスを作成でき、データベースの検索効率を向上させることができます。
CREATE INDEX
はインデックス作成専用のコマンドですが、内部的にはALTER TABLE
文を使用してインデックスが作成されるため、実質的にALTER TABLE
の特殊なケースと考えることができます。
SQL例
employees
テーブルのlastName
列にインデックスを追加する場合は、以下のようにSQLを記述します。
CREATE INDEX idx_lastname ON employees (lastName);
このSQLはemployees
テーブルのlastName
列にidx_lastname
という名前のインデックスを作成します。インデックスの種類(例:UNIQUE
、FULLTEXT
、SPATIAL
)を指定することも可能です
ALTER TABLE ADD INDEX
について
ALTER TABLE
文はインデックスを追加するためだけではなく、列の追加や削除、列のタイプの変更など、テーブルの構造を変更する広範な操作を行う際に使用されます。
SQL例
employees
テーブルにfirstName
列のインデックスを追加するには、以下のように書きます。
ALTER TABLE employees ADD INDEX idx_firstname (firstName);
このSQLコマンドは、employees
テーブルにfirstName
列でidx_firstname
という名前のインデックスを追加します。
パフォーマンスについて
パフォーマンスの観点から見ると、CREATE INDEX
とALTER TABLE ADD INDEX
は内部的に同じ処理を行うため、実質的なパフォーマンスの差はありません。
結論
CREATE INDEX
とALTER TABLE ADD INDEX
の主な違いは、その使用目的にあります。
CREATE INDEX
はインデックス作成に特化しているのに対して、ALTER TABLE
はテーブルの構造を変更する幅広い目的で使用されます。
しかし、パフォーマンスの観点からは、どちらの文を使用しても、インデックスを追加する際の効率に大きな違いはありません。
参考リンク:
- MySQL 5.7 Reference Manual: CREATE INDEX Statement
- MySQL 5.7 Reference Manual: ALTER TABLE Statement
- MySQL Tutorial: ALTER table add INDEX
Discussion