摘要: MySQL在許多情況下都會用到臨時表總結一下什麼時候會用到臨時表 什麼是臨時表MySQL用於儲存一些中間結果集的表臨時表只在當前連接可見當關閉連線時Mysql會自動刪除表並釋放所有空間。
MySQL在許多情況下都會用到臨時表,總結一下什麼時候會用到臨時表:
什麼是臨時表:MySQL用來儲存一些中間結果集的表,臨時表只在目前連接可見,當關閉連接時,Mysql會自動刪除表並釋放所有空間。為什麼會產生臨時表:一般是因為複雜的SQL導致臨時表被大量創建
臨時表分為兩種,一種是記憶體臨時表,一種是磁碟臨時表。記憶體臨時表採用的是memory儲存引擎,透過internal_tmp_disk_storage_engine參數來控制使用哪種儲存引擎,從mysql5.7.6之後預設為innodb儲存引擎,先前版本預設為myisam儲存引擎)。分別透過Created_tmp_disk_tables 和 Created_tmp_tables 兩個參數來查看產生了多少磁碟臨時表和所有產生的臨時表(記憶體和磁碟)。
記憶體臨時表空間的大小由兩個參數控制:tmp_table_size 和 max_heap_table_size 。一般來說是透過兩個參數中較小的數來控制記憶體臨時表空間的最大值,而對於開始在記憶體中建立的臨時表,後來由於資料太大轉移到磁碟上的臨時表,只由max_heap_table_size參數控制。針對直接在磁碟上產生的臨時表,沒有大小控制。
下列操作會使用至臨時表:
1ã union查詢
2ã 對於檢視的操作,例如使用一些TEMPTABLELE、union或aggregation
##aggregation# 3ã 子查詢
4ã semi-join 包括not in、exist等
5ã 查詢產生的派生表
6ã 複雜的group by 和order by
7ã Insert select 同一個表,mysql會產生一個臨時表快取select的行
8ã 多個表更新
9ã GROUP_CONCAT() 或COUNT(DISTINCT) 語句
# #。 。 。 Mysql也會阻止記憶體表空間的使用,直接使用磁碟臨時表:1ã 表中含有BLOB或TEXT欄位2ã 使用union或union all時, select子句有大於512位元組的欄位3ã Show columns或desc 表的時候,有LOB或TEXT4ã GROUP BY 或DISTINCT 子句中包含長度大於512位元組的列相關推薦:以上是什麼時候會用到臨時表? MySQL臨時表的使用總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!