DELETEタスク オプションは、Updateオペレータ固有のものです。 単一のDELETE SQL文よりもはるかに速く行を削除します。
DeleteTask属性が'Y'に設定されている場合、行は、固有プライマリ インデックス(UPI)の等価条件ではなく値に基づいて単一のテーブルから削除されます。 DELETEタスク オプションは、単一のセッションおよび単一のインスタンスを使用します。
DELETEタスク オプションは、指定した日付より前のトランザクション日付を持つすべての行を削除するなど、テーブル内の大部分を占める行を削除する必要がある場合に選択するのに適しています。
DELETEタスク オプションは、Updateオペレータの標準のDELETE文に非常によく似た操作をしますが、以下の違いがあります。
- DELETEタスク オプションでは、通常、インデックスが設定されていない列に基づいて削除が行なわれます。
- ただし、以下の特定の制約付きで、プライマリ インデックスに基づく削除が可能です。
- UPI値の等価テストは許可されません。
- UPI値の不等価テストは許可されます。
- NUPI値の等価テストは許可されます。
- 単独のDELETE文は、APPLY文で使用されます。
- 適用すべき変化する入力レコードがないため、DELETEタスク オプションは取得フェーズを含みません。
- 適用フェーズでは、各ターゲット ブロックを読み取り、該当する行を削除します。
- 変更されたブロックはディスクに書き戻されます。
DELETEタスク オプションを指定した場合、UpdateオペレータはStandaloneオペレータとして機能します。つまり、ソース データ ストリームから読み取る通常の Consumerオペレータとしては機能しません。 例外は、DELETEタスクがWHERE句を含むAPPLY文によって呼び出され、ソース データ ストリームが単一の行のみを含む場合です。 この場合、DELETEタスク オプションが設定されたUpdateオペレータは引き続き Consumerオペレータとして機能します。
Standaloneオペレータとして機能するか Consumerオペレータとして機能するかに関係なく、DELETEタスク操作には以下の規則が適用されます。
- 1セッションのみに接続する。
- インスタンスを1つだけ指定する。
- DMLグループを1つだけ指定する。
- DMLグループにはDML文を1つだけ指定する。
- DELETE文を1つだけ使用する。
- ターゲット テーブルを1つだけ指定する。
- 最初のエラー テーブルは使用せずに無視する。
- WHERE句を使用する場合、データ レコードを1つだけ提供する。