2012-02-01 18 views
15

このテーブルはSQL Server 2008 R2のインスタンスに格納されており、夜間に実行されるスケジュールされたプロセスがあります。この表には、一度に最大500Kのレコードを格納できます。このテーブルを処理した後、私はので、私は次の方法のどれが最もオーバーヘッド(すなわち過度のトランザクションログエントリ)を生じるであろう疑問に思って、そこからすべての行を削除する必要があります。テーブルを切り捨てまたは削除してテーブルを作成

  1. 切り捨て表
  2. 、テーブルを削除して再作成

テーブルの内容を削除するのは、時間と追加のトランザクションログエントリのためです。

コンセンサスが切り捨てられているようです。皆さんありがとうございます!

+4

[ここでのログ量の比較](http://dba.stackexchange.com/a/7685/3690) 'TRUNCATE'は' DROP'よりややロギングが少ないので、ドロップするとそのオブジェクトの関連する行もシステムテーブル(ログに記録されます)から削除されます –

答えて

8

テーブルを切り捨てても、トランザクションログに行単位のエントリが残るわけではありません。どちらのソリューションでもログが乱雑になりすぎることはありません。それが私だったら、毎回ドロップして作成する必要があります。

13

TRUNCATE TABLEが最適です。 MSDNから:

は、個々の行 削除をログインせずにテーブルからすべての行を削除します。

これは、トランザクションログを膨らませないことを意味します。テーブルを削除して作成するだけでなく、複雑なSQLが必要になるだけでなく、追加の権限も必要になります。テーブルに添付された設定(トリガー、GRANTまたはDENYなど)も再構築する必要があります。

5

私はTRUNCATE TABLEに行きます。インデックス、トリガーなどが落とされると、オーバーヘッドが発生する可能性があります。さらに、そのテーブルに必要な他の必要なオブジェクトとともに再作成する必要があるアクセス権も失われます。あなたはDROPを実行し、

同じバッチでDROP TABLEをCREATE TABLEおよびCREATE場合は、その下のMDSNでDROP TABLEにも

は同じバッチで同じテーブル 上で実行するべきではありません少し知っておかなけれに言及します。そうしないと予期しないエラーが発生することがあります

2

テーブルを削除すると、関連するオブジェクト(インデックス、トリガ)が破棄され、プロシージャまたはビューが無効になることがあります。私はあなたのログを爆発させず、ドロップと作成を行う可能性のある問題のどれもを引き起こさないので、切り詰めて行くだろう。

+0

ありがとう、関連付けられたインデックスやトリガはありません。トランザクションログが大きくなりすぎるのを心配しました。 –

+0

私はテーブルに拡張プロパティを追加し始めたときにこの方法を学びました。また、t-SQLスクリプトがドロップアンド作成を使用していたため、拡張プロパティを再入力してスクリプトを切り捨てる必要がありました。その後、拡張プロパティーを失うことはありません。 –

関連する問題