16.20 - 例: 単一のSQLリクエスト内の更新操作と挿入操作に対するMERGEの使用 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

MERGE文を使用して、単一のSQLリクエスト内で更新操作と挿入操作を実行することができます。MERGEでは、更新操作と挿入操作を個別に実行しなければならない事例とは異なり、1つのパスでインデックスと参照整合性の保守を実行できます。

例えば、次のテーブルを作成し、MERGEリクエストを使用してソース テーブルt2からターゲット テーブルt1への行の更新と挿入を実行するとします。

     USING (empno  INTEGER,     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER,
       c1 INTEGER);

     CREATE TABLE t2 (
       a2 INTEGER,
       b2 INTEGER,
       c2 INTEGER);

     MERGE INTO t1
          USING t2
          ON a1=a2
          WHEN MATCHED THEN
              UPDATE
              SET b1=b2
          WHEN NOT MATCHED THEN
              INSERT (a2, b2, c2);

EXPLAINは、条件("OB.t1.a1 = OB.t2.a2")でのOB.t2からOB.t1への一致更新および不一致挿入によるマージを示します。

このMERGEリクエストは、次の意味的に同じ複文のUPDATE INSERTリクエストとしても記述できます。

     UPDATE t1
           FROM t2
           SET b1=b2
           WHERE a1=a2
           ;INSERT INTO t1
           SELECT a2, b2, c2
           FROM t2, t1
           WHERE NOT (a1=a2);

2つのEXPLAINレポートを比較すると、MERGEリクエストのほうが意味的に同じUPDATEとINSERTの複文リクエストよりも優れていることがわかります。

UPDATEとINSERTの複文リクエストでは、以下のステップが並列して実行されます。
  • OB.t2からOB.t1へのMERGE更新
  • OB.t2からのRETRIEVEステップ

次に、結合条件("OB.t1.a1 <> a2")によるOB.t1への結果のJOINステップがあります。