参照する列すべてを指定してVCIインデックスを定義することで、VCIを利用した高速な集計が可能となります。
VCIを利用した検索が可能になる条件を以下に説明します。
なお、通常のインデックスと同じく、VCIを利用するかはコスト計算により判断されます。このため、VCIが利用可能な場合でも、他の実行計画の方がコストが低い場合は、その計画が選択されます。
VCIが選択されるSQL文
一般的なSELECT文のほかに、以下のSQL文でもVCIを利用することができます。ただし、“VCIが選択されない条件”に該当する場合は、VCIを利用しません。
SELECT INTO ~
CREATE TABLE AS SELECT ~
CREATE MATERIALIZED VIEW ~ AS SELECT ~
CREATE VIEW ~ AS SELECT ~
COPY (SELECT ~) TO ~
VCIが選択されない条件
以下の条件の場合には、VCIを利用しません。
親問い合わせの列を参照する副問い合わせを指定している
ロック処理句(FOR UPDATEなど)を指定している
スクロール可能、またはWITH HOLDを指定したカーソルを使用している
トランザクションの隔離レベルがSERIALIZABLEである
“VCIが利用されない関数と演算子”に示した関数、または演算子を指定している
ユーザ定義関数を指定している
| 分類 | 関数/演算子 | |
|---|---|---|
| 算術関数と演算子 | 乱数関数 | random、setseed | 
| 文字列関数と演算子 | 文字列関数 | 引数の書式を指定したformat、regexp_matches、regexp_split_to_array、regexp_split_to_table | 
| 日付/時刻関数と演算子 | 日付/時刻関数 | age(timestamp)、current_date、current_time、current_timestamp、localtime 、localtimestamp、statement_timestamp、transaction_timestamp | 
| 遅延実行関数 | pg_sleep、pg_sleep_for、pg_sleep_until | |
| 列挙型サポート関数 | すべての関数と演算子 | |
| 幾何関数と演算子 | すべての関数と演算子 | |
| ネットワークアドレス関数と演算子 | すべての関数と演算子 | |
| テキスト検索関数と演算子 | すべての関数と演算子 | |
| XML関数 | すべての関数 | |
| JSON関数と演算子 | すべての関数と演算子 | |
| シーケンス操作関数 | すべての関数 | |
| 配列関数と演算子 | すべての関数と演算子 | |
| 範囲関数と演算子 | すべての関数と演算子 | |
| 集約関数 | 汎用集約関数 | array_agg、json_agg、json_object_agg、string_agg、xmlagg | 
| 統計処理用の集約関数 | corr、covar_pop、covar_samp、regr_avgx、regr_avgy、regr_count、regr_intercept、regr_r2、regr_slope、regr_sxx、regr_sxy、regr_syy | |
| 順序集合集約関数 | すべての関数 | |
| 仮定集合集約関数 | すべての関数 | |
| ウィンドウ関数 | すべての関数 | |
| 副問い合わせ式 | 左辺に行コンストラクタを指定した副問い合わせ式 | |
| 行と配列の比較 | 行コンストラクタ、複合型の比較 | |
| 集合を返す関数 | すべての関数 | |
| システム情報関数 | すべての関数 | |
| システム管理関数 | すべての関数 | |
| トリガ関数 | すべての関数 | |
| セション情報関数 | current_role、current_user | |