他のインデックス(例: セカンダリ インデックス)同様、結合インデックスは、結合インデックスの基になる基本テーブルに対してDELETE、INSERTまたはUPDATEリクエストが実行される時には自動的に保守されます。
結合インデックスの保守によるオーバーヘッドのコスト
結合インデックスを使用することを検討する際には、更新時に結合インデックスを保守することによるオーバヘッドのコストを慎重に分析し、そのコストを問合わせの処理能力への影響と比較検討します。
結合インデックスは、実行計画で追加のAMPステップを生成することにより保守されます。
一般的な方法では、まず結合インデックスの影響を受ける部分を再生成します。これは、現在の更新に関連する基本テーブルの行のみを使用して、結合インデックスに定義された通りに、結合問合わせを再実行することにより行ないます。
各更新リクエストに対して、結合インデックス結果全体が再生成されるわけではありません。
データベース操作の種類 | 結合インデックスの保守 |
---|---|
DELETE | 結合インデックスの対応する行は、Merge Deleteステップにより探索され、削除されます。 |
INSERT | 新しく生成された結合結果は、Mergeステップにより結合インデックスに追加されます。 |
UPDATE | 必要な変更が実行されてから、古い行が削除されて(Merge Delete)新しい行がマージされることにより結合インデックスの対応する行が置き換えられます。 外部結合で定義された結合インデックスの場合は、通常一致しない行の保守のためにさらにステップを実行する必要があります。 |
セカンダリ インデックス同様、圧縮結合インデックスの物理的な行は更新によって複数の行に分割されることがあります。新しく生成された各行の固定列値は同じですが、繰返し列値のリストは異なります。
それらの行は自動的には再結合されません。そのような行を再結合するには、圧縮結合インデックスを削除してから書き換えます。
例で使用する結合インデックス定義
以下の項の例では、次の結合インデックスを想定しています。
CREATE JOIN INDEX OrderJoinLine AS SELECT (l_orderkey,o_orderdate,o_custkey,o_totalprice), (l_partkey,l_quantity,l_extendedprice,l_shipdate) FROM lineitem LEFT OUTER JOIN Ordertbl ON l_orderkey=o_orderkey ORDER BY o_orderdate PRIMARY INDEX (l_orderkey);