他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

7.5. 関数インデックス

関数インデックスでは、インデックスは、1つのテーブルの1つ以上の列に適用された関数の結果上で定義されます。関数インデックスは、関数呼び出しの結果に基づくデータへの速いアクセスを得るために使うことができます。

例えば、大文字/小文字を関係なく比較をするための一般的な方法として、lower関数を使います。

SELECT * FROM test1 WHERE lower(col1) = 'value';

インデックスがlower(column)演算の結果で定義されていれば、この問い合わせでインデックスを使用することができます。

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));

インデックス定義の関数は1つ以上の引数を取ることができますが、定数ではなくテーブル列でなくてはいけません。関数インデックスは、たとえその関数が1つ以上の入力フィールドを使うとしても、常にシングル列(すなわち関数の結果)です。関数呼び出しを含むマルチ列インデックスは作成できません。

Tip: しかし、上記の制約は、インデックス定義で使用する、結果を内部的に求める関数を定義することにより、簡単に実現することができます。