明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

什么時(shí)候會用到臨時(shí)表?MySQL臨時(shí)表的使用總結(jié)

[摘要]摘要: MySQL在很多情況下都會用到臨時(shí)表總結(jié)一下什么時(shí)候會用到臨時(shí)表 什么是臨時(shí)表MySQL用于存儲一些中間結(jié)果集的表臨時(shí)表只在當(dāng)前連接可見當(dāng)關(guān)閉連接時(shí)Mysql會自動刪除表并...
摘要: MySQL在很多情況下都會用到臨時(shí)表總結(jié)一下什么時(shí)候會用到臨時(shí)表 什么是臨時(shí)表MySQL用于存儲一些中間結(jié)果集的表臨時(shí)表只在當(dāng)前連接可見當(dāng)關(guān)閉連接時(shí)Mysql會自動刪除表并釋放所有空間。

MySQL在很多情況下都會用到臨時(shí)表,總結(jié)一下什么時(shí)候會用到臨時(shí)表:

什么是臨時(shí)表:MySQL用于存儲一些中間結(jié)果集的表,臨時(shí)表只在當(dāng)前連接可見,當(dāng)關(guān)閉連接時(shí),Mysql會自動刪除表并釋放所有空間。為什么會產(chǎn)生臨時(shí)表:一般是由于復(fù)雜的SQL導(dǎo)致臨時(shí)表被大量創(chuàng)建

臨時(shí)表分為兩種,一種是內(nèi)存臨時(shí)表,一種是磁盤臨時(shí)表。內(nèi)存臨時(shí)表采用的是memory存儲引擎,磁盤臨時(shí)表采用的是myisam存儲引擎(磁盤臨時(shí)表也可以使用innodb存儲引擎,通過internal_tmp_disk_storage_engine參數(shù)來控制使用哪種存儲引擎,從mysql5.7.6之后默認(rèn)為innodb存儲引擎,之前版本默認(rèn)為myisam存儲引擎)。分別通過Created_tmp_disk_tables 和 Created_tmp_tables 兩個(gè)參數(shù)來查看產(chǎn)生了多少磁盤臨時(shí)表和所有產(chǎn)生的臨時(shí)表(內(nèi)存和磁盤)。

內(nèi)存臨時(shí)表空間的大小由兩個(gè)參數(shù)控制:tmp_table_size 和 max_heap_table_size 。一般來說是通過兩個(gè)參數(shù)中較小的數(shù)來控制內(nèi)存臨時(shí)表空間的最大值,而對于開始在內(nèi)存中創(chuàng)建的臨時(shí)表,后來由于數(shù)據(jù)太大轉(zhuǎn)移到磁盤上的臨時(shí)表,只由max_heap_table_size參數(shù)控制。針對直接在磁盤上產(chǎn)生的臨時(shí)表,沒有大小控制。

下列操作會使用到臨時(shí)表:

1?? union查詢

2?? 對于視圖的操作,比如使用一些TEMPTABLE算法、union或aggregation

3?? 子查詢

4?? semi-join 包括not in、exist等

5?? 查詢產(chǎn)生的派生表

6?? 復(fù)雜的group by 和 order by

7?? Insert select 同一個(gè)表,mysql會產(chǎn)生一個(gè)臨時(shí)表緩存select的行

8?? 多個(gè)表更新

9?? GROUP_CONCAT() 或者 COUNT(DISTINCT) 語句

。。。

Mysql還會阻止內(nèi)存表空間的使用,直接使用磁盤臨時(shí)表:

1?? 表中含有BLOB或者TEXT列

2?? 使用union或者union all時(shí),select子句有大于512字節(jié)的列

3?? Show columns或者 desc 表的時(shí)候,有LOB或者TEXT

4?? GROUP BY 或者 DISTINCT 子句中包含長度大于512字節(jié)的列

相關(guān)推薦:

mysql臨時(shí)表的使用

Mysql中的臨時(shí)表使用方法

以上就是什么時(shí)候會用到臨時(shí)表?MySQL臨時(shí)表的使用總結(jié)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。