DROP TABLE、TRUNCATE TABLE和DELETE的區別


相同點

TRUNCATE TABLEDELETE都可以刪除整個數據庫表的記錄

不同點

  1. DELETE
    DML語言
    可以回退
    可以有條件的刪除
    DELETE FROM 表名 WHERE 條件

  2. TRUNCATE TABLE
    DDL語言
    無法回退
    默認所有的表內容都刪除
    刪除速度比delete快
    TRUNCATE TABLE 表名

  3. DROP TABLE
    用於刪除表(表的結構、屬性以及索引也會被刪除);
    DROP TABLE 表名

原理

DDL(Data Definition Language)數據定義語言,DML(Data Manipulation Language)數據操作語言。

  • TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而TRUNCATE則不會被撤銷。
  • TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
  • TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作后的表比Delete操作后的表要快得多。
  • TRUNCATE不能觸發任何Delete觸發器。
  • 當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
  • 不能清空父表。

優化

在數據庫里,使用delete刪除數據以后,數據庫的存儲容量不會減少,而且使用delete刪除某個表的數據以后,查詢這張表的速度和刪除之前一樣,不會發生變化。
因為數據庫有一個HWM高水位,它是oracle的一個表使用空間最高水位線。當插入了數據以后,高水位線就會上漲,但是如果你采用delete語句刪除數據的話,數據雖然被刪除了,但是高水位線卻沒有降低,還是你剛才刪除數據以前那么高的水位。除非使用truncate刪除數據。那么,這條高水位線在日常的增刪操作中只會上漲,不會下跌,所以數據庫容量也只會上升,不會下降。而使用select語句查詢數據時,數據庫會掃描高水位線以下的數據塊,因為高水位線沒有變化,所以掃描的時間不會減少,所以才會出現使用delete刪除數據以后,查詢的速度還是和delete以前一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM