轉自: 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表空間)
? ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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