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