DROP TABLE、TRUNCATE TABLE和DELETE的區別
阿新 • • 發佈:2021-11-11
相同點
TRUNCATE
TABLE
和DELETE
都可以刪除整個資料庫表的記錄
不同點
-
DELETE DML語言 可以回退 可以有條件的刪除
DELETE FROM 表名 WHERE 條件
-
TRUNCATE TABLE DDL語言 無法回退 預設所有的表內容都刪除 刪除速度比delete快
TRUNCATE TABLE 表名
-
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以前一樣。