🐡

CREATE INDEX文とALTER TABLE ADD INDEX文の比較(MySQL)

2024/04/10に公開

はじめに

このページでは、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という名前のインデックスを作成します。インデックスの種類(例:UNIQUEFULLTEXTSPATIAL)を指定することも可能です

ALTER TABLE ADD INDEXについて

ALTER TABLE文はインデックスを追加するためだけではなく、列の追加や削除、列のタイプの変更など、テーブルの構造を変更する広範な操作を行う際に使用されます。

SQL例

employeesテーブルにfirstName列のインデックスを追加するには、以下のように書きます。

ALTER TABLE employees ADD INDEX idx_firstname (firstName);

このSQLコマンドは、employeesテーブルにfirstName列でidx_firstnameという名前のインデックスを追加します。

パフォーマンスについて

パフォーマンスの観点から見ると、CREATE INDEXALTER TABLE ADD INDEXは内部的に同じ処理を行うため、実質的なパフォーマンスの差はありません。

結論

CREATE INDEXALTER TABLE ADD INDEXの主な違いは、その使用目的にあります。
CREATE INDEXはインデックス作成に特化しているのに対して、ALTER TABLEはテーブルの構造を変更する幅広い目的で使用されます。
しかし、パフォーマンスの観点からは、どちらの文を使用しても、インデックスを追加する際の効率に大きな違いはありません。

参考リンク:

Discussion