Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


11.1.6 実表の全行を削除する方法

実表の全行を削除する場合,基本的には,操作系SQLのTRUNCATE TABLE文を実行することを推奨します。

TRUNCATE TABLE文を実行すると,DELETE文(WHERE句を省略)よりも短時間で全行を削除できます。また,セグメントが解放されるため,削除した行データが格納されていた領域を再利用できます。

TRUNCATE TABLE文とDELETE文の違いについて,次の表に示します。

表11‒1 TRUNCATE TABLE文とDELETE文の違い

項番

比較項目

TRUNCATE TABLE文

DELETE文(WHERE句を省略)

1

処理性能

高速

DELETE文よりも短時間で全行を削除できます。

低速

TRUNCATE TABLE文と比べると,全行の削除に時間が掛かります。

2

セグメントの解放

解放される

削除した行データが格納されていた領域を再利用できます。

解放されない

削除した行は無効になりますが,ディスクからは削除されません。そのため,削除した行データが格納されている領域は再利用できません。

また,カラムストア表の場合は,無効情報管理用ページを確保するため,使用するセグメントが増加することがあります。

3

COMMIT文の実行要否

自動的にコミットされる

処理が正常終了した場合,処理完了と同時にコミットされます。COMMIT文の実行は不要です。

自動的にコミットされない

処理完了後,COMMIT文を実行する必要があります。

4

排他制御(同一表に対するSELECT文との同時実行の可否)

同時実行できない

TRUNCATE TABLE文を実行すると,処理対象表の排他を占有モードで確保します。そのため,同一表に対しては,SELECT文とTRUNCATE TABLE文は同時実行できません。

同時実行できる

同一表に対して,SELECT文とDELETE文は同時実行できます。

5

推奨する実行タイミング

  • 短時間で全行を削除したいとき

  • 削除した行データが確保していた領域を再利用したいとき

  • 同一表に対して,削除処理と検索処理を同時実行したいとき

  • トランザクションの1要素として使用したいとき

注※

TRUNCATE TABLE文およびDELETE文を実行したときに確保される排他資源と排他制御モードの詳細については,「2.10.4 確保される排他資源と排他制御モード」を参照してください。

実表の全行を削除する指定例を次に示します。

指定例

販売履歴表(SALESLIST)内の全行を削除します。

TRUNCATE TABLE "SALESLIST"

TRUNCATE TABLE文の指定形式および規則については,マニュアルHADB SQLリファレンス操作系SQLTRUNCATE TABLE(実表の全行削除)を参照してください。

重要

全行を削除する前に,削除する行が定義されている実表に対して,コマンドの再実行が必要かどうか(実表が更新不可状態かどうか)を確認してください。確認する方法については,「10.9.2 実表の状態や使用量を確認したい場合」の「(1) 実表が更新不可状態かどうかを確認する場合」を参照してください。

コマンドの再実行が必要な場合

コマンドを再実行してください。そのあとで,全行を削除してください。

コマンドの再実行が必要な状態のままで(実表が更新不可状態のままで)全行を削除した場合

中断したコマンドによって作成された作業用一時ファイルが残ることがあります。作業用一時ファイルを削除するには,すべての実表の更新不可状態を解除する必要があります。

作業用一時ファイルの削除については,「15.2.6 コマンド実行時の作業用一時ファイルを格納するディスクの空き容量が不足した場合の対処方法」の「(2) ディスクに不要な作業用一時ファイルが残っている場合」を参照してください。