影響を受ける結合インデックス行を直接アクセスにより探索可能にするUPDATEリクエストに対する最適化が行なわれています。例えば、UPDATEリクエストがプライマリまたはセカンダリの結合インデックスに対する探索条件を指定する場合、影響を受ける結合インデックス行は再生成されません。その代わりに、条件を満たす行を結合インデックスで直接探索し、状況に応じて変更することができます。
UPDATEの最適化のための前提条件
この最適化方法(つまり、直接更新方法)を使用するには、次の条件を満たしていなければなりません。
- 結合インデックスへのプライマリまたはセカンダリ アクセス パスが存在する。
- join_index_column_2が定義されている場合、join_index_column_1列に変更が加えられていない。
- 結合インデックスの定義に含まれる結合条件列は変更されない。
- 結合インデックスのプライマリ インデックス列は変更されない。
UPDATEリクエストの実行時に結合インデックスを保守するための最適化された方法の例
次はUPDATEリクエストの実行時に結合インデックスを維持するための最適化された方法の例です。
EXPLAIN
UPDATE lineitem
SET l_quantity=l_quantity - 5
WHERE l_orderkey=10;
*** Help information returned. 11 rows.
*** Total elapsed time was 1 second.
Explanation
-----------------------------------------------------------------------
1) First, we execute the following steps in parallel.
1) We do a single-AMP UPDATE from join index table
df2.OrderJoinLine by way of the primary index
"df2.OrderJoinLine.l_orderkey = 10" with a residual
condition of ("df2.OrderJoinLine.l_orderkey = 10").
2) We do a single-AMP UPDATE from df2.lineitem by way of the
primary index "df2.lineitem.l_orderkey = 10" with no
residual conditions.
2) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
-> No rows are returned to the user as the result of statement 1.