Truncate Table

提供: InterBase

文と関数のリファレンス(言語リファレンス ガイド) へ戻る


はじめに

Truncate Table コマンドにより、ユーザーおよびアプリケーションは、データベース テーブルのコンテンツを空にします。 この機能は、行を頻繁に削除する必要があるテーブルの場合に便利です。 Truncate Table コマンドは、同等の DELETE FROM テーブル コマンドに比べ、実行はより高速であり、必要な入出力はより少なく、そしてはるかに少ない情報をジャーナル記録およびアーカイブします。 ETL アプリケーションや他のアプリケーションでは、使用後に削除したい、もしくはより永続的な場所(履歴テーブルなど)に移動させたい、といった大量のデータを計画する場合に、TRUNCATE TABLENO RESERVE SPACE テーブル割り当てオプションの組み合わせを使用すると便利でしょう。


要件と制約

  1. Truncate Table コマンドは、排他的かつ保護された書き込みロックを取得します。これにより、切り捨て(trancate)られるテーブルへアクセスしようとする並列トランザクションに対して、可視効果があります。また、テーブルはいずれにしても切り捨てられますが、TRUNCATE CASCADE においては依存テーブル ツリー階層のすべての層がロックされ、TRUNCATE DEFERRED では、これらのロックはトランザクションが終了するまで保持されます。
  2. 前述の後、ユーザーは、NO WAIT または WAIT TIME の制限を持つトランザクションを使用して、Truncate Table コマンドを実行することができます。これにより、トランザクションは、タイムアウトが発生したり、制限回数の再試行が行われた際には、オペレーションをロールバックすることができます。
  3. システム テーブル、一時テーブル、およびビューは、切り詰められません。最適化やパフォーマンスのために、エンジンがこれらのテーブル タイプの一部を物理的に切り捨てることがありますが、ユーザーがその機能にアクセスすることはできません。しかしながら、ユーザーはより良いパフォーマンスを把握することはできます。
  4. 外部テーブルは切り捨てられます。
  5. Truncate Table コマンドの実行者を追跡することはできません。Truncate Table コマンドがトリガとなるアクションを記述することができる FOR EACH STATEMENT トリガは、InterBase ではサポートされていません。


動作の仕組み

Truncate Table は、行レベルではなくテーブル レベルで処理され、メタデータではなく、テーブル内のストアド データに対して作用します。Truncate Table は、DELETE FROM <table> コマンドと同じ方法でテーブルのすべての行を削除しますが、DELETE トリガ、制約のチェック、インデックスのメンテナンスといった、行レベルでのアクションは行いません。Truncate Table は通常、行レベルの削除より高速です。

Truncate Table コマンドは、トランザクション管理下にはありません。テーブルを空にする際、それを実行したトランザクションをロール バックしても、このアクションを元に戻すことはできません。Point-in-Time リカバリのみが、データを InterBase ジャーナル アーカイブから復元できます。切り捨てられたテーブルには、行データやインデックス、blob のための確保領域がありません。

Truncate Table コマンドは、切り捨てられるテーブルを参照している、他のテーブルの外部キー制約については、慎重にならないといけません。 そのもっともシンプルな形式では、外部キー制約は、テーブルの切り捨てを許可しません。InterBase Truncate Table では、この制限を超えるために、SQL 以外のランタイム拡張を提供しています。これにより、既存の外部キー制約と調整できない状況において、コマンド実行が可能かどうか、より自由な解釈ができます。Truncate Table はトランザクション管理下にありませんが、それが含まれているトランザクションの結果がコミットまたはロールバックされるまで、自分の実行を遅延させることにより、トランザクション管理下にあるように動作させることは可能です。


トピック



次は: