SQLiteで、インデックス、ユニークインデックス、部分インデックスを作成する方法について記載します。
目次
1. インデックスの作成方法
構文
CREATE INDEX インデックス名 ON テーブル名 (カラム1, ・・・);
※ カラムは複数指定できます。
例
hogeテーブル の t1列 にインデックスを作成します。
1 |
CREATE INDEX idx_t1 ON hoge (t1); |
2. ユニークインデックスの作成方法
構文
CREATE UNIQUE INDEX インデックス名 ON テーブル名 (カラム1,・・・)
※ カラムは複数指定できます。
例
hogeテーブル の t1列 にユニークインデックスを作成します。
1 |
CREATE UNIQUE INDEX unq_idx_t1 ON hoge (t1); |
3. 部分インデックスの作成方法
通常のインデックスは、表の全ての行に対してインデックスを生成しますが、部分インデックスは、条件に一致する行のみインデックスを作成します。
部分インデックスは通常のインデックス・ユニークインデックスのどちらでも作成することができます。
構文
CREATE (UNIQUE) INDEX インデックス名 ON テーブル名 (カラム1・・・) WHERE 条件
例1
hogeテーブル の t1列 が NULL 以外の行に対して status列にインデックスを作成します。
1 |
CREATE INDEX part_idx_t1 ON hoge (status) WHERE t1 is NOT NULL; |
where句の条件で使用する列は、インデックスを作成する列以外も指定できます。
今回の場合は、次のように指定しています。
インデックスを作成する列:status
WHERE句の条件に指定する列:t1
例2
hogeテーブル の status列 が 2以上の行に対してユニークインデックスを作成します。
1 |
CREATE UNIQUE INDEX part_idx_status ON hoge (status) WHERE status >= 2; |
4. 存在する場合は作成しない
同名のインデックスが存在しない場合のみ、インデックスを作成することができます。
構文
CREATE INDEX IF NOT EXISTS インデックス名 ON テーブル名 (カラム1, カラム2,・・・);
※ インデックス、ユニークインデックス、部分インデックス共通で使用できます。
インデックス名の前に、”IF NOT EXISTS” をつけると存在しない場合のみ作成することができます。
すでに存在する場合は、SQL文が無視されエラーにもなりません。
例
hogeテーブル の t1列 にインデックスを作成します。
1 |
CREATE INDEX IF NOT EXISTS idx_t1 ON hoge (t1); |
インデックスの削除方法については、こちらに記載しています。