天天看點

資料庫delete和truncate、drop

1、機制、效率

truncate是直接把表删除,然後再重建表結構。優點是速度快。比一行一行删除快,但是删除操作記錄不記入日志,truncate與drop不能復原。

delete語句執行删除的過程是每次從表中删除一行,并且同時将該行的删除操作作為事務記錄在日志中儲存以便進行進行復原操作。

2、對表和索引所占空間的影響

truncate後,表和索引所占用的空間會恢複到初始大小。

delete操作不會減少表或索引所占用的空間。

drop語句将表所占用的空間全釋放掉。

3、操作對象

truncate和delete隻删除資料, drop則删除整個表(結構和資料),truncate隻能對table,delete可以是table和view

在速度上,一般來說,drop> truncate > delete。

在使用drop和truncate時一定要注意,雖然可以恢複,但為了減少麻煩,還是要慎重。

如果想删除部分資料用delete,注意帶上where子句,復原段要足夠大;

如果想删除表,當然用drop; 

如果想保留表而将所有資料删除,如果和事務無關,用truncate即可;

如果和事務有關,或者想觸發trigger,還是用delete;

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入資料。