外部臨時表:
通過CREATE TEMPORARY TABLE 創建的臨時表,這種臨時表稱為外部臨時表。這種臨時表只對當前用戶可見,當前會話結束的時候,該臨時表會自動關閉。這種臨時表的命名與非臨時表可以同名(同名后非臨時表將對當前會話不可見,直到臨時表被刪除)。
內部臨時表:
內部臨時表是一種特殊輕量級的臨時表,用來進行性能優化。這種臨時表會被MySQL自動創建並用來存儲某些操作的中間結果。這些操作可能包括在優化階段或者執行階段。這種內部表對用戶來說是不可見的,但是通過EXPLAIN或者SHOW STATUS可以查看MYSQL是否使用了內部臨時表用來幫助完成某個操作。
delete和trucate的區別:
其中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 刪除可以返回行數