Oracle中的delete和truncate的关系
轉自:http://chenxy.blog.51cto.com/729966/168459
1、相同點
a.都可以刪除數據,其中truncate用于全表清空數據,而delete可以選擇的刪除
2、不同點:
a.回滾,delete支持事物回滾,而truncate不支持。
延伸:在oracle中事物能回滾,是因為oracle中設計的undo表空間。數據再刪除后仍能回滾是因為把數據放到了undo表空間
delte屬于DML語言,DML語言需要手動提交事物,可以進行事務回滾
truncate屬于DDL語言,DDL語言屬于隱式提交事務,因此不能進行回滾
b.高水線
oracle中的表用來容納數據的上限。high water mark(可形象理解為水庫的歷史最高水位),一般情況,每次增長為5個數據塊。
delete操作執行時,不影響數據所占用的數據塊,高水線保持不變
truncate操作執行時,會釋放數據占用空間。高水線位置下降。也可以通過reuse store 來進行復位
可以通過數據庫自帶的block命令觀察效果,oracle分配區時默認一次是7+1個,增長是5個.其中一些sql優化是針對數據占用空間來進行的,
因為在查詢數據時,即使該表沒有數據,但只要占用了數據空間都會進行全表掃描。
c.空間占用
delete不會釋放,而truncate則回收了數據空間
d.效率
可以通過刪除數據所用時間來比較,結論:truncate>delete,(因為delte把數據放到了undo表空間)
總結
以上是生活随笔為你收集整理的Oracle中的delete和truncate的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: waveout系列API实现pcm音频播
- 下一篇: 万左右口碑最好的车(万元预算不想买国产车