SQL CREATE INDEX ステートメント
CREATE INDEX ステートメントは、データベースのテーブルにインデックスを作成し、データの取得(検索)速度を向上させるために使用されます。
ユーザーがインデックスを直接目にすることはありません。これらはバックグラウンドで検索やクエリを高速化するためだけに利用されます。
注意点: インデックスが設定されたテーブルの更新(INSERT、UPDATE、DELETE)は、設定されていないテーブルよりも時間がかかります。これは、データ本体だけでなくインデックス自体も更新する必要があるためです。したがって、頻繁に検索条件として指定されるカラムに対してのみ、戦略的にインデックスを作成することが重要です。
1. インデックスの種類:非一意と一意
SQL では、主に以下の 2 種類のインデックスを作成できます。
- CREATE INDEX: 重複した値を許可する「非一意(Non-unique)インデックス」を作成します。
- CREATE UNIQUE INDEX: 重複した値を許可しない「一意(Unique)インデックス」を作成します。
2. CREATE INDEX の構文
基本的なインデックス作成の構文は以下の通りです。
CREATE INDEX インデックス名
ON テーブル名 (カラム1, カラム2, ...);3. CREATE UNIQUE INDEX の構文
一意性を保証するインデックスを作成する場合の構文は以下の通りです。
CREATE UNIQUE INDEX インデックス名
ON テーブル名 (カラム1, カラム2, ...);注記: インデックス作成の詳細はデータベースエンジンによって異なる場合があります。使用しているデータベースの公式ドキュメントで具体的な構文を確認してください。
4. CREATE INDEX の使用例
以下の SQL は、「Persons」テーブルの「LastName」カラムに対して、「idx_lastname」という名前の非一意インデックスを作成します。
CREATE INDEX idx_lastname
ON Persons (LastName);複数のカラムを組み合わせたインデックス(複合インデックス)を作成する場合は、カッコ内にカラム名をカンマ区切りでリストします。
CREATE INDEX idx_lname_fname
ON Persons (LastName, FirstName);5. DROP INDEX ステートメント
不要になったインデックスを削除するには、DROP INDEX ステートメントを使用します。構文は RDBMS ごとに大きく異なります。
SQL Server:
DROP INDEX テーブル名.インデックス名;MySQL:
ALTER TABLE テーブル名
DROP INDEX インデックス名;MS Access:
DROP INDEX インデックス名 ON テーブル名;DB2 / Oracle:
DROP INDEX インデックス名;