秒はdrop、truncateとdeleteの違いが分かります。


(1)DELETE文が削除を実行するプロセスは、テーブルから1行ずつ削除し、同時に行の削除操作をログに保存してロールバック操作を行う。
TRUNCATETABLEはすべてのデータを一度に表から削除します。単独の削除操作記録をログに記録して保存しません。削除行は元に戻りません。また、削除中は表に関する削除トリガーはアクティブになりません。実行速度が速い。
(2)表と索引が占める空間。
テーブルがTRUNCATEされると、このテーブルとインデックスが占有する空間は初期サイズに戻ります。
DELETE操作は、表や索引によって占有される空間を減少させません。
drop文は表のスペースを全部解放します。
(3)一般的には、drop>truncate>delete
(4)適用範囲。
TRUNCATEはTABLEにしか対応できません。DELETEはテーブルとビューであっても良いです。
(5)TRUNCATEとDELETEはデータのみ削除し、DROPはテーブル全体(構造とデータ)を削除します。
(6)truncateとwhereを持たないdelete:データだけを削除し、テーブルの構造(定義)drop文を削除しないでテーブルの構造を削除することに依存する制約、フリップフロップインデックス(index);この表に依存する格納プロセス/関数は保持されますが、その状態はinvalidとなります。
(7)delete文はDMMLです。この操作はrollbacksegmentに入れられます。事務提出後に有効になります。該当するtiggerがあれば、実行時にトリガされます。
(8)truncate、dropはDLLで、操作はすぐに有効になります。元のデータはrollbacksegmentに入れないと、ロールバックできません。
(9)バックアップがない場合は、慎重にdropとtruncateを使用する。一部のデータ行を削除するにはdeleteを採用し、whereと結合して影響範囲を制約することに注意する。ロールバックは十分大きいです。テーブル用のdropを削除します表を保留したいなら、表のデータを削除します。事務に関係がないなら、truncateで実現できます。事務関係や先生がトリガーを触発したいなら、やはりdeleteを使います。
(10)Truncatebleの表名は速く、しかも効率が高い。
truncatetableは、WHERE子文を持たないDELETE文と機能的に同じです。両方とも表のすべての行を削除します。しかし、TRUNCATETABLEはDELETEよりも速くて、しかも使っているシステムと事務日誌の資源が少ないです。DELETE文は1行ずつ削除し、削除した行ごとに1つを事務ログに記録します。TRUNCATETABLEは、メモリテーブルデータ用のデータページをリリースすることによりデータを削除し、トランザクションログにのみページのリリースを記録する。
(11)TRUNCATETABLEは表のすべての行を削除しますが、表の構造とその列、制約、索引などはそのままです。新しい行の識別に使用するカウント値を列のシードにリセットします。マークのカウント値を残したいなら、DELETEに変えてください。テーブル定義とデータを削除する場合は、DROP_BLE文を使用してください。
(12)FOREEGNKEYによって制約されて参照される表には、TRUNCATETABLEは使用されず、WHERE子文を持たないDELETE文は使用されるべきである。TRUNCATETABLEはログに記録されていないので、トリガーをアクティブにすることができません。
一、delete
1、deleteはDMMLであり、delete操作を実行する時、表から行を削除し、同時にその行の削除操作をredoとundoテーブル空間に記録して、ロールバックとやり直し操作を行うが、表空間は十分大きいので、手動で提出して操作してから有効になり、rollbackで操作をキャンセルすることができる。
2、deleteは条件によって表の条件を満たすデータを削除してもいいです。もしwhereサブ句を指定しないなら、テーブルの中のすべてのレコードを削除します。
3、delete文は表の占用するextentに影響しないで、高水線(highwatermark)はもとの位置を維持します。
二、トライカスト
1、truncateはDDLで、暗黙的に提出しますので、ロールバックできません。トリガーを触発しません。
2、truncateは表中のすべての記録を削除し、また新たに高水線とすべてのインデックスを設定し、デフォルトの場合はminextenstsのextentに空間を釈放します。reusestogeを使用しない限り、。ログは記録されませんので、実行速度は速いですが、ロックバックで操作をキャンセルすることはできません。(一つの表をうっかり落としたら元に戻すこともできます。rollbackで回復することはできません。)
3、外部キー(foreignkey)制約引用の表については、truncatetableは使用できず、where子文を持たないdelete文を使うべきである。
4、truncatebleはインデックスビューに参加したテーブルには使用できません。
三、drop
1、dropはDDLで、暗黙的に提出しますので、ロールバックできません。トリガーを触発しません。
2、drop文はテーブル構造とすべてのデータを削除し、テーブルの占有空間を全部解放します。
3、drop文は表の構造に依存する制約を削除します。トリガー、インデックスはこの表の記憶プロセス/関数に依存して保持しますが、invalid状態になります。
まとめ:
1、速度の上では、一般的には、drop>truncate>deleteです。
2、dropとtruncateを使う時は必ず注意してください。回復できますが、トラブルを減らすためには慎重にしてください。
3、部分のデータを削除したいなら、deleteを使って、where子句を持つように注意してください。ロールバックは十分大きいです。
テーブルを削除したいなら、もちろんdropを使います。
表を保留したいなら、すべてのデータを削除します。事務と関係がないなら、truncateを使えばいいです。
事務と関係がある場合、またはtriggerを触発したい場合は、やはりdeleteを使います。
テーブル内部の破片を整理すれば、ドレスオーバーにtruncateでついてきて、データを再導入/挿入することができます。
締め括りをつける
ここでは、drop、truncateとdeleteの違いについての文章を紹介します。もっと関連するdrop truncateとdeleteの違いを紹介します。私たちの以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。