PostgreSQLでテーブルにインデックスを作成する方法

こんにちは、さるまりんです。

タイトルの通り、PostgreSQLのテーブルにインデックスを作成する方法です。

基本的にはCRATE INDEXを使います。

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

単一カラムに対して

一つのカラムに対してのインデックスであれば上の構文のままいけます。

例えばmembersテーブルのprefectureカラムにインデックスを作成するには

CREATE INDEX idx_members_prefecture ON members (prefecture);

です。

複数のカラムに対して

複数のカラムに対してインデックスを作成します。
同じテーブルのfirst_namelast_nameに合わせてインデックスを作成するには

CREATE INDEX idx_members_name ON members (first_name, last_name);

です。

一意なインデックス

インデックスが一意(ユニーク)であること(重複がないこと)を保証する場合はUNIQUEキーワードを使って↓のようにします。

CREATE UNIQUE INDEX idx_members_email_unique ON members (email);

これでemailは一意となることが保証されるので、同じメールアドレスを持つ会員はmembersテーブルに存在することができません。

部分インデックス

特定の条件を満たす行に対してのみインデックスを作成することもできます。
例えば、status='active'membersを有効な会員とし、それのみを対象としてemailカラムにインデックスを作成するには

CREATE INDEX idx_members_active_email ON members (email) WHERE status = 'active';

です。

無効な会員はメールアドレスで検索することが少なければこのような部分的なインデックスが役に立ちます。

基本的なこと、ちょっと応用的なこと、どちらもメモしてみました。
データベース作成やテーブル作成は最初にやったらそれ以降あまり高い頻度でやらないのでいつも忘れてしまいます。ここへ戻ってきたらできるように残しておきます。

読んでくださってありがとうございました。
それではまた!