国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL問答系列之什么情況下會用到臨時表

2024-07-25 19:08:57
字體:
供稿:網(wǎng)友

臨時表介紹

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

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

MySQL在以下幾種情況會創(chuàng)建臨時表:

1、UNION查詢;

2、用到TEMPTABLE算法或者是UNION查詢中的視圖;

3、ORDER BY和GROUP BY的子句不一樣時;

4、表連接中,ORDER BY的列不是驅(qū)動表中的;

5、DISTINCT查詢并且加上ORDER BY時;

6、SQL中用到SQL_SMALL_RESULT選項時;

7、FROM中的子查詢;

8、子查詢或者semi-join時創(chuàng)建的表;

EXPLAIN 查看執(zhí)行計劃結(jié)果的 Extra 列中,如果包含 Using Temporary 就表示會用到臨時表。

當(dāng)然了,如果臨時表中需要存儲的數(shù)據(jù)量超過了上限( tmp-table-size 或 max-heap-table-size 中取其大者),這時候就需要生成基于磁盤的臨時表了。

在以下幾種情況下,會創(chuàng)建磁盤臨時表:

1、數(shù)據(jù)表中包含BLOB/TEXT列;

2、在 GROUP BY 或者 DSTINCT 的列中有超過 512字符 的字符類型列(或者超過 512字節(jié)的 二進制類型列,在5.6.15之前只管是否超過512字節(jié));

3、在SELECT、UNION、UNION ALL查詢中,存在最大長度超過512的列(對于字符串類型是512個字符,對于二進制類型則是512字節(jié));

4、執(zhí)行SHOW COLUMNS/FIELDS、DESCRIBE等SQL命令,因為它們的執(zhí)行結(jié)果用到了BLOB列類型。

從5.7.5開始,新增一個系統(tǒng)選項 internal_tmp_disk_storage_engine 可定義磁盤臨時表的引擎類型為 InnoDB,而在這以前,只能使用 MyISAM。而在5.6.3以后新增的系統(tǒng)選項 default_tmp_storage_engine 是控制 CREATE TEMPORARY TABLE 創(chuàng)建的臨時表的引擎類型,在以前默認是MEMORY,不要把這二者混淆了。

詳見下例

mysql> set default_tmp_storage_engine = "InnoDB";-rw-rw---- 1 mysql mysql 8558 Jul 7 15:22 #sql4b0e_10_0.frm -- InnoDB引擎的臨時表 -rw-rw---- 1 mysql mysql 98304 Jul 7 15:22 #sql4b0e_10_0.ibd-rw-rw---- 1 mysql mysql 8558 Jul 7 15:25 #sql4b0e_10_2.frmmysql> set default_tmp_storage_engine = "MyISAM";-rw-rw---- 1 mysql mysql 0 Jul 7 15:25 #sql4b0e_10_2.MYD -- MyISAM引擎的臨時表 -rw-rw---- 1 mysql mysql 1024 Jul 7 15:25 #sql4b0e_10_2.MYImysql> set default_tmp_storage_engine = "MEMORY";-rw-rw---- 1 mysql mysql 8558 Jul 7 15:26 #sql4b0e_10_3.frm -- MEMORY引擎的臨時表

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 河北省| 万州区| 石河子市| 全椒县| 镇沅| 墨脱县| 府谷县| 盐边县| 巧家县| 连江县| 丹巴县| 巧家县| 隆尧县| 海盐县| 枞阳县| 东安县| 连平县| 石城县| 沂南县| 庆阳市| 海阳市| 临西县| 江阴市| 建瓯市| 揭东县| 浑源县| 汤阴县| 固原市| 青冈县| 社旗县| 博爱县| 克山县| 沛县| 尖扎县| 遵义县| 平顶山市| 区。| 绥芬河市| 舟山市| 靖江市| 乌拉特中旗|