更新系のアクセスモデルは、更新する標的レコードを位置づけるまでの部分と、標的レコードを更新する部分から構成されます。

標的レコードを位置づける部分は、制約系アクセスモデルのいずれかを選択します。ただし、インデックス検索のアクセスモデル(表データを取得しないアクセスモデル)は、更新する標的レコードを位置づけるまでの制約アクセスモデルとはなりません。なぜなら、更新処理は必ず表のデータを更新するからです。また、並列スキャンのアクセスモデルも、UPDATE文:探索またはDELETE文:探索のアクセスプランとして選択されません。
[UPDATE文:探索またはDELETE文:探索で更新標的レコードを位置づけるまでの部分]
制約アクセスモデル名 |
|---|
UPDATE文:位置づけまたはDELETE文:位置づけでは、カーソルにより位置づけられた現在行を更新または削除します。標的レコードの位置づけにはTABLE KEY SCANのアクセス方式を使用します。
標的レコードの更新は、データベースの表のレコードの更新(更新、削除または挿入)と、インデックスのレコードの更新(更新、削除または挿入)を行います。インデックスは次の場合に更新されます。
INSERT文を実行した場合
その表に定義しているすべてのインデックスにレコードが挿入されます。
DELETE文を実行した場合
その表に定義しているすべてのインデックスから表に対応するレコードが削除されます。
UPDATE文を実行した場合
UPDATE文のSET句にインデックスを構成する列が指定されているインデックスが更新されます。
表のレコードの位置が物理的に移動した場合に、TIDを更新するため、その表に定義しているすべてのインデックスが更新されます。
参考
表のレコードの位置は、次の操作を行った場合に移動することがあります。
表の分割条件に指定した列を更新する場合
表のクラスタキーを更新する場合
VARCHAR/NCHAR VARYING/BLOBの列を前より長いデータに更新する場合
WHERE探索条件に指定した条件から、制約アクセスモデルのいずれかを選択して、データベースを更新するアクセスモデルです。

(1) 制約アクセスモデルにより更新標的レコードを位置づける。
(上記の例では、インデックス検索と表データ取得のアクセスモデルを採用している)
(2) 表レコードを取得する。
(3) 表レコードのC3部分を更新する。
(4) 更新前のデータからインデックスの当該レコードを削除して、新しいレコードを挿入する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : SCAN [TBL1_IX1_DSO ][ ][SORT0001 ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SCM1.TBL1
scan type INDEX KEY SCAN(2)
dso name TBL1_IX1_DSO [PAGE/SH]
condition evaluation No
scan record number 100
[ 2] INSERT ELEMENT
table name SORT0001
insert record length 12
-------------------------------------------------------------------------------
2 : SCAN [SORT0001 ][TBL1_BASE_DSO ][ ]
UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SORT0001
scan type TABLE ALL SCAN
condition evaluation No
[ 2] SCAN ELEMENT
table name SCM1.TBL1
scan type TABLE KEY SCAN
dso name TBL1_BASE_DSO [PAGE/SH]
condition evaluation No
scan record number 1
[ 3] UPDATE ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [PAGE/EX]
TBL1_IX2_DSO [PAGE/EX]カーソルにより位置づけられているレコードを更新するアクセスモデルです。

(1) 現在カーソル位置のレコードをTABLE KEY SCANで位置づける。
(2) 表レコードを取得する。
(3) 表レコードのC3部分を更新する。
(4) 更新前のデータからインデックスの当該レコードを削除して、新しいレコードを挿入する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : SCAN [TBL1_BASE_DSO ][ ][ ]
UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SCM1.TBL1
scan type TABLE KEY SCAN
dso name TBL1_BASE_DSO [PAGE/EX]
condition evaluation No
scan record number 1
[ 2] UPDATE ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [PAGE/EX]
TBL1_IX2_DSO [PAGE/EX]WHERE探索条件に指定した条件から、制約アクセスモデルのいずれかを選択して、データベースのレコードを削除するアクセスモデルです。

(1) 制約アクセスモデルにより更新標的レコードを位置づける。
(上記の例では、表の全件検索を採用している)
(2) 表レコードを取得する。
(3) 表レコードを削除する。
(4) 更新前のデータからインデックスの当該レコードを削除する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : SCAN [TBL1_BASE_DSO ][ ][ ]
UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SCM1.TBL1
scan type TABLE ALL SCAN
dso name TBL1_BASE_DSO [DSI/SH]
condition evaluation Yes
scan record number 100
[ 2] DELETE ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [DSI/EX]
TBL1_IX1_DSO [DSI/EX]
TBL1_IX2_DSO [DSI/EX]カーソルにより位置づけられているレコードを削除するアクセスモデルです。

(1) 現在カーソル位置のレコードをTABLE KEY SCANで位置づける。
(2) 表レコードを取得する。
(3) 表レコードを削除する。
(4) 更新前のデータからインデックスの当該レコードを削除する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : SCAN [TBL1_BASE_DSO ][ ][ ]
UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SCM1.TBL1
scan type TABLE KEY SCAN
dso name TBL1_BASE_DSO [PAGE/EX]
condition evaluation No
scan record number 1
[ 2] DELETE ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [PAGE/EX]
TBL1_IX1_DSO [PAGE/EX]
TBL1_IX2_DSO [PAGE/EX]データベースの表に挿入値リストで指定したレコードを挿入するアクセスモデルです。

(1) 表のレコードを作成し、表に挿入する。
(2) インデックスのレコードを作成し、インデックスに挿入する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] INSERT ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [PAGE/EX]
TBL1_IX1_DSO [PAGE/EX]
TBL1_IX2_DSO [PAGE/EX]データベースの表に問合せ指定の結果を挿入するアクセスモデルです。
問合せ指定の結果は、制約系アクセスモデルやジョイン系アクセスモデルおよびその組合わせにより求められた結果です。

(1) 問合せ指定の結果を求める。
(2) 表のレコードを作成し、表に挿入する。
(3) インデックスのレコードを作成し、インデックスに挿入する。
[アクセスプランの出力例]
===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
1 : SCAN [TBL2_BASE_DSO ][ ][ ]
UPDATE [ ][ ][TBL1_BASE_DSO ]
-------------------------------------------------------------------------------
[ 1] SCAN ELEMENT
table name SCM1.TBL2
scan type TABLE ALL SCAN
dso name TBL2_BASE_DSO [DSI/SH]
condition evaluation Yes
scan record number 100
[ 2] INSERT ELEMENT
table name SCM1.TBL1
dso name TBL1_BASE_DSO [DSI/EX]
TBL1_IX1_DSO [DSI/EX]
TBL1_IX2_DSO [DSI/EX]