轉(zhuǎn)自: http://chenxy.blog.51cto.com/729966/168459
1、相同點(diǎn)
? ? ? a.都可以刪除數(shù)據(jù),其中truncate用于全表清空數(shù)據(jù),而delete可以選擇的刪除
2、不同點(diǎn):
? ?
?
a.回滾
,delete支持事物回滾,而truncate不支持。
? ? ?延伸:在oracle中事物能回滾,是因?yàn)閛racle中設(shè)計(jì)的undo表空間。數(shù)據(jù)再刪除后仍能回滾是因?yàn)榘褦?shù)據(jù)放到了undo表空間
? ? ?? ?delte屬于DML語言,DML語言需要手動(dòng)提交事物,可以進(jìn)行事務(wù)回滾
? ? ? truncate屬于DDL語言,DDL語言屬于隱式提交事務(wù),因此不能進(jìn)行回滾
? ?
?b.高水線
? ? ? ? ? oracle中的表用來容納數(shù)據(jù)的上限。high water mark(可形象理解為水庫的歷史最高水位),一般情況,每次增長為5個(gè)數(shù)據(jù)塊。
? ? ? ? ? ?delete操作執(zhí)行時(shí),不影響數(shù)據(jù)所占用的數(shù)據(jù)塊,高水線保持不變
? ? ? ? ? ? ? ?truncate操作執(zhí)行時(shí),會(huì)釋放數(shù)據(jù)占用空間。高水線位置下降。也可以通過reuse store 來進(jìn)行復(fù)位
? ? ? ? ? 可以通過數(shù)據(jù)庫自帶的block命令觀察效果,oracle分配區(qū)時(shí)默認(rèn)一次是7+1個(gè),增長是5個(gè).其中一些sql優(yōu)化是針對數(shù)據(jù)占用空間來進(jìn)行的,
? ?? 因?yàn)樵诓樵償?shù)據(jù)時(shí),即使該表沒有數(shù)據(jù),但只要占用了數(shù)據(jù)空間都會(huì)進(jìn)行全表掃描。
? ?
c.空間占用
? ? ? ? ? delete不會(huì)釋放,而truncate則回收了數(shù)據(jù)空間
?
? ?d.效率
? ? ? ? 可以通過刪除數(shù)據(jù)所用時(shí)間來比較,結(jié)論:truncate>delete,(因?yàn)閐elte把數(shù)據(jù)放到了undo表空間)
? ?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
