臨時表與中間表


外部臨時表:

通過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 刪除可以返回行數


免責聲明!

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



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