1. 程式人生 > >臨時表與中間表

臨時表與中間表

原來 初始 log 自增字段 完成 存儲 刪除索引 隱式 臨時

外部臨時表:

通過CREATE TEMPORARY TABLE 創建的臨時表,這種臨時表稱為外部臨時表。這種臨時表只對當前用戶可見,當前會話結束的時候,該臨時表會自動關閉。這種臨時表的命名與非臨時表可以同名(同名後非臨時表將對當前會話不可見,直到臨時表被刪除)。

內部臨時表:

內部臨時表是一種特殊輕量級的臨時表,用來進行性能優化。這種臨時表會被MySQL自動創建並用來存儲某些操作的中間結果。這些操作可能包括在優化階段或者執行階段。這種內部表對用戶來說是不可見的,但是通過EXPLAIN或者SHOW STATUS可以查看MYSQL是否使用了內部臨時表用來幫助完成某個操作。

delete和trucate的區別:

  1. truncate table wp_comments;
  2. delete * from wp_comments;

其中truncate操作中的table可以省略,delete操作中的*可以省略。這兩者都是將wp_comments表中數據清空,不過也是有區別的,如下:

  • truncate是整體刪除(速度較快), delete是逐條刪除(速度較慢)。
  • truncate不寫服務器log,delete寫服務器log,也就是truncate效率比delete高的原因。
  • truncate不激活trigger(觸發器),但是會重置Identity(標識列、自增字段),相當於自增列會被置為初始值,又重新從1開始記錄,而不是接著原來的ID數。而delete刪除以後,Identity依舊是接著被刪除的最近的那一條記錄ID加1後進行記錄。

程度從強到弱

1、drop table tb 刪除表的結構和數據,沒有辦法找回 2、truncate (table) tb 刪除表中的所有記錄,表結構還在,不寫日誌,無法找回刪除的記錄,速度快,不能與where一起使用 3、delete from tb (where) 一行一行地刪除所有記錄,表結構還在,寫日誌,可以恢復的,速度慢。 區別:truncate和delete的區別 1、事務:truncate是不可以rollback的,但是delete是可以rollback的; 原因:truncate刪除整表數據(ddl語句,隱式提交),delete是一行一行的刪除,可以rollback 2、效果:truncate刪除後將重新水平線和索引(id從零開始) ,delete不會刪除索引 3、 truncate 不能觸發任何Delete觸發器。 4、delete 刪除可以返回行數

臨時表與中間表