レポートロールアップの一部として作成するテーブルがいくつかあります。あとは全然必要ありません。誰かが、より高速になるのでそれらを切り捨てると述べました。
レポートロールアップの一部として作成するテーブルがいくつかあります。あとは全然必要ありません。誰かが、より高速になるのでそれらを切り捨てると述べました。
回答:
テーブルからレコードを削除すると、すべての削除がログに記録され、削除されたレコードに対して削除トリガーが実行されます。Truncateは、各行をログに記録せずにテーブルを空にする、より強力なコマンドです。SQL Serverは、各行の外部キーをチェックする必要があるため、テーブルを参照する外部キーでテーブルを切り捨てることを防ぎます。
Truncateは通常超高速で、一時テーブルからデータを消去するのに理想的です。将来の使用のためにテーブルの構造を保持します。
データだけでなくテーブル定義も実際に削除したい場合は、テーブルを削除するだけです。
DROPTABLEはテーブルを削除します。
TRUNCATE TABLEはそれを空にしますが、将来のデータのためにその構造を残します。
DROPとTRUNCは異なることをします:
切り捨てテーブル
個々の行の削除をログに記録せずに、テーブルからすべての行を削除します。TRUNCATE TABLEは、WHERE句のないDELETEステートメントに似ています。ただし、TRUNCATE TABLEはより高速で、使用するシステムおよびトランザクションログリソースが少なくなります。
ドロップテーブル
1つ以上のテーブル定義と、それらのテーブルのすべてのデータ、インデックス、トリガー、制約、および権限仕様を削除します。
速度に関する限り、違いは小さいはずです。とにかく、テーブル構造がまったく必要ない場合は、必ずDROPを使用してください。
DELETETABLEとTRUNCATETABLEの違いを意味していると思います。
ドロップテーブル
データベースからテーブルを削除します。
テーブルを削除
条件なしですべての行を削除します。トリガーと参照がある場合、これはすべての行に対して処理されます。また、インデックスがある場合は変更されます。
切り捨てテーブル
行数をゼロに設定し、各行をログに記録しません。それは他の両方よりもはるかに速いこと。
set the row count zero
実際には、ID値を初期IDシード値に戻します。
これらの回答のいずれも、これら2つの操作に関する重要な違いを指摘していません。ドロップテーブルは、ロールバックできる操作です。 ただし、切り捨てはロールバックできません['TRUNCATETABLE'もロールバックできます]。このように、非常に大きなテーブルをドロップすると、行が多い場合に非常にコストがかかる可能性があります。これは、ロールバックする場合に備えて、すべてのテーブルを一時的なスペースに記録する必要があるためです。
通常、大きなテーブルを削除したい場合は、テーブルを切り捨ててから削除します。このようにして、データは記録なしで修正され、テーブルをドロップできます。データを記録する必要がないため、そのドロップは非常に安価になります。
ただし、truncateはデータを削除してテーブルを残すだけですが、dropは実際にはデータとテーブル自体を削除することを指摘しておくことが重要です。(外部キーがそのようなアクションを排除しないと仮定して)
DROP TABLE [table_name];
DROPコマンドは、データベースからテーブルを削除するために使用されます。これはDDLコマンドです。テーブルのすべての行、インデックス、および特権も削除されます。DROP操作はロールバックできません。
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
DELETEコマンドはDMLコマンドです。WHERE句で指定された条件に基づいて、テーブルからすべての行または一部の行を削除するために使用できます。これは行ロックを使用して実行され、テーブルの各行は削除のためにロックされます。トランザクションログを維持するため、TRUNCATEよりも低速です。DELETE操作はロールバックできます。
TRUNCATE TABLE [table_name];
TRUNCATEコマンドは、テーブルからすべての行を削除します。各行の削除はログに記録されませんが、代わりにテーブルのデータページの割り当て解除がログに記録されるため、DELETEよりも高速になります。これはテーブルロックを使用して実行され、すべてのレコードを削除するためにテーブル全体がロックされます。これはDDLコマンドです。TRUNCATE操作はロールバックできません。
TRUNCATE TABLEは、古いインデックス作成などをすべて保持します。DROP TABLEは、明らかにテーブルを削除し、後で再作成する必要があります。
切り捨てTableAの代わりにTableAを削除しますか?よくある誤解は、彼らが同じことをするというものです。そうではありません。実際、この2つには多くの違いがあります。
DELETEは、行ごとにログに記録される操作です。これは、各行の削除がログに記録され、物理的に削除されることを意味します。
外部キーまたはその他の制約をそのままにして、制約に違反しない行を削除できます。
TRUNCATEもログに記録された操作ですが、方法が異なります。TRUNCATEは、データが存在するデータページの割り当て解除をログに記録します。データページの割り当て解除は、データ行が実際にはデータページにまだ存在しているが、エクステントは再利用のために空としてマークされていることを意味します。これにより、TRUNCATEはDELETEよりも高速な操作を実行できます。
外部キー制約があるテーブルをTRUNCATEすることはできません。制約を削除し、テーブルを切り捨てて、制約を再適用する必要があります。
TRUNCATEは、ID列をデフォルトのシード値にリセットします。
truncateはすべての行を削除しますが、テーブル自体は削除しません。これは、where句を指定せずに削除するのと本質的に同じですが、通常は高速です。
上記のステートメントの1つを修正しました...「切り捨てはロールバックできません」
切り捨てはロールバックできます。外部キー参照がある場合など、テーブルの切り捨てまたは削除ができない場合があります。月次レポートなどのタスクの場合、テーブルが不要になったら、テーブルを削除するだけです。このロールアップレポートをより頻繁に実行している場合は、代わりにテーブルを保持して切り捨てを使用する可能性があります。
これがお役に立てば幸いです。役立つ情報をいくつかご紹介します...
詳細については、次の記事を参照してください:http: //sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx
また、削除と切り捨ての詳細については、次の記事を参照してください:http: //www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx
ありがとう!ジェフ
TRUNCATE TABLEは、WHERE句のないDELETEステートメントと機能的に同じです。どちらもテーブル内のすべての行を削除します。ただし、TRUNCATE TABLEは、DELETEよりも高速で、使用するシステムおよびトランザクションログリソースが少なくなります。
DELETEステートメントは、一度に1行ずつ削除し、削除された各行のエントリをトランザクションログに記録します。TRUNCATE TABLEは、テーブルのデータを格納するために使用されるデータページの割り当てを解除することによってデータを削除し、ページの割り当て解除のみがトランザクションログに記録されます。
TRUNCATE TABLEはテーブルからすべての行を削除しますが、テーブル構造とその列、制約、インデックスなどは残ります。新しい行のIDによって使用されるカウンターは、列のシードにリセットされます。IDカウンターを保持する場合は、代わりにDELETEを使用してください。テーブル定義とそのデータを削除する場合は、DROPTABLEステートメントを使用します。
FOREIGNKEY制約によって参照されるテーブルでTRUNCATETABLEを使用することはできません。代わりに、WHERE句なしでDELETEステートメントを使用してください。TRUNCATE TABLEはログに記録されないため、トリガーをアクティブ化できません。
TRUNCATE TABLEは、インデックス付きビューに参加しているテーブルでは使用できません。
http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspxから
DELETE
ステートメントは、一度に1行ずつ削除し、削除された各行のエントリをトランザクションログに記録します。TRUNCATE TABLE
テーブルデータの格納に使用されるデータページの割り当てを解除してデータを削除し、ページの割り当て解除のみをトランザクションログに記録しますWHERE
で句をDELETE
しかし、中にTRUNCATE
あなたがそれを使用することはできませんDELETE
行ロックを使用してステートメントを実行すると、テーブル内の各行が削除のためにロックされます。TRUNCATE TABLE
常にテーブルとページをロックしますが、各行はロックしませんDELETE
ステートメントの実行後も、テーブルに空のページを含めることができます。削除操作でテーブルロックを使用しない場合、テーブル(ヒープ)には多くの空のページが含まれます。インデックスの場合、削除操作によって空のページが残る可能性TRUNCATE TABLE
テーブルからすべての行を削除しますが、テーブル構造とその列、制約、インデックスなどは残りますDELETE
ステートメントはRESEED
列を識別しませんが、列をTRUNCATE
ステートメントRESEEDS
し
IDENTITY
ますTRUNCATE TABLE
テーブルでは使用できません。
FOREIGN KEY
制約によって参照されます。(それ自体を参照する外部キーを持つテーブルを切り捨てることができます。)TRUNCATE TABLE
操作は個々の行の削除をログに記録しないため、トリガーをアクティブ化できませんステートメントを削除
Deleteステートメントdeletetable rowsを返し、テーブルから削除された行数を返します。このステートメントでは、where句を使用してテーブルからデータを削除します。
ステートメントの切り捨て
Truncateステートメントテーブルからすべての行を削除または削除しました。
ドロップステートメント
ドロップステートメントは、すべてのレコードとテーブルの構造を削除しました
削除
DELETEコマンドは、テーブルから行を削除するために使用されます。WHERE句は、一部の行のみを削除するために使用できます。WHERE条件が指定されていない場合、すべての行が削除されます。DELETE操作を実行した後、変更を永続的にするか、元に戻すには、トランザクションをコミットまたはロールバックする必要があります。
切り捨てる
TRUNCATEは、テーブルからすべての行を削除します。操作をロールバックすることはできません...そのため、TRUCATEはより高速で、DELETEほど多くの元に戻すスペースを使用しません。
差出人:http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands