ホームページ > データベース > SQL > sql削除行と切り捨ての違いは何ですか

sql削除行と切り捨ての違いは何ですか

Robert Michael Kim
リリース: 2025-03-04 17:49:44
オリジナル
974 人が閲覧しました

sql行を削除してテーブルを切り捨てます:違いは何ですか?

DELETETRUNCATEDELETEのコアの違いは、テーブルからデータを削除するアプローチにあります。 は、指定されたWHERE句(またはWHERE条項が提供されている場合はすべての行)に基づいて、行を1つずつTRUNCATE を削除するデータ操作言語(DML)ステートメントです。 これは、各行を個別に処理し、各削除を記録することを意味します。 一方、は、テーブルDELETEのすべてのTRUNCATE列を一度にDELETE>すべてのTRUNCATE行を削除するデータ定義言語(DDL)ステートメントです

。個々の行の削除を記録しない、より速く、バルク操作です。

は、特定の行を外科的に除去すると考えてください。一方、

は、1回のスワイプでテーブルをきれいに拭くようなものです。 重要なのは、

を条件付き除去を可能にしますが、TRUNCATEは常にすべての行を削除します。これは、各削除を個別にログに記録する必要がないためです。 パフォーマンスのゲインは、テーブルから多数の行またはすべての行を削除する必要があるシナリオで特に顕著です。 DELETEの列ごとの処理は、そのオーバーヘッドのログと相まって、かなりのパフォーマンスボトルネックにつながる可能性があります。 さらに、A 操作のトランザクションログは、TRUNCATEのそれよりも大幅に大きくなり、トランザクションのコミット時間と潜在的にディスクスペース消費に影響を与えます。 何百万もの行を削除しているシナリオを考えてみましょう。 DELETE DELETE TRUNCATE TRUNCATE操作が実行され、トランザクションがロールバックされる(DELETE)の場合、削除された行が元の状態に復元されることを意味します。 トランザクションログは、個々の削除を追跡し、逆転を可能にします。 逆に、

ステートメントは通常、トランザクションの一部ではありません(データベースシステムはそれを許可する拡張機能を提供する場合があります)。 通常、

操作はすぐにコミットされ、a

が削除されたデータが復元されない後に

。データは、操作が完了すると、取消不能に削除されたと見なされます。 これは、DELETEがDML操作と同じレベルの粒度で個々の行の除去の詳細なログを維持しないDDL操作であるためです。 delete and Truncateを使用した後にデータを回復できますか?もしそうなら、

DELETEROLLBACK

操作後のデータ回復は、特にまだコミットされていないトランザクション内で操作が発生した場合に発生することがよくあります。 トランザクションがまだアクティブである場合、a

は削除された行を復元します。トランザクションがコミットした場合でも、データベースのバックアップ(完全、増分、または差)を使用してデータを回復できます。また、データベースシステムとロギング戦略に応じて、個々の行を回復するためにトランザクションログを使用することもできます。TRUNCATETRUNCATEROLLBACK操作後のデータ回復は非常に困難です。 TRUNCATEはDDLステートメントであるため、通常、個々の行の詳細なトランザクションログエントリが生成されません。 したがって、aTRUNCATEはデータを回復しません。 A

後の回復の最善の策は、データベースのバックアップに依存することです。 最近のバックアップがある場合は、そのバックアップからテーブルを復元できます。 トランザクションログのみから回復することは、一般にの後には実行可能ではありません。 回復が成功する可能性は、バックアップの最新性と頻度に直接比例します。

以上がsql削除行と切り捨ての違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート