1. 程式人生 > >mysql----快速刪除資料表(drop,truncate.delete)

mysql----快速刪除資料表(drop,truncate.delete)

概念:三者均可刪除資料表 TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放儲存表資料所用的資料頁來刪除資料,並且只在事務日誌中記錄頁的釋放。TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其資料,請使用 DROP TABLE 語句。
速度:innodb ,truncate table 》drop table >delete

上面是myisam engine下測試,truncate table 比drop table速度差不多;

如果是innodb ,truncate table 比drop table快一倍。

truncate talbe保留表結構,indexs ,trigger, procedure, function,而drop table不保留這些。

執行完truncate table之後,自增欄位從第一個開始。

http://hi.baidu.com/jackbillow/item/cfe5f8e03780e0a8c00d7527


使用
在實際應用中,三者的區別是明確的。 
當你不再需要該表時, 用 drop; 
當你仍要保留該表,但要刪除所有記錄時, 用 truncate; 
當你要刪除部分記錄時(always with a WHERE clause), 用 delete.

1.DELETE
 ・DML語言
 ・可以回退
 ・可以有條件的刪除

     DELETE FROM 表名
   WHERE 條件

2.TRUNCATE TABLE
 ・DDL語言
 ・無法回退
 ・預設所有的表內容都刪除
 ・刪除速度比delete快。

   TRUNCATE TABLE 表名

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

在oracle裡,使用delete刪除資料以後,資料庫的儲存容量不會減少,而且使用delete刪除某個表的資料以後,查詢這張表的速度和刪除之前一樣,不會發生變化。

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