濮阳杆衣贸易有限公司

主頁 > 知識庫 > MySQL問答系列之什么情況下會用到臨時(shí)表

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

熱門標(biāo)簽:湘潭電銷機(jī)器人咨詢電話 外呼系統(tǒng)防封號違法嗎 高德地圖標(biāo)注模式 寶應(yīng)電信400電話辦理費(fèi)用 外呼系統(tǒng)服務(wù) 如何在高德地圖標(biāo)注新地址 電銷機(jī)器人針對的 高德地圖標(biāo)注中心個(gè)人注冊 400電話辦理都選易號網(wǎng)

臨時(shí)表介紹

什么是臨時(shí)表:MySQL用于存儲一些中間結(jié)果集的表,臨時(shí)表只在當(dāng)前連接可見,當(dāng)關(guān)閉連接時(shí),Mysql會自動(dòng)刪除表并釋放所有空間。為什么會產(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)存和磁盤)。

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

1、UNION查詢;

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

3、ORDER BY和GROUP BY的子句不一樣時(shí);

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

5、DISTINCT查詢并且加上ORDER BY時(shí);

6、SQL中用到SQL_SMALL_RESULT選項(xiàng)時(shí);

7、FROM中的子查詢;

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

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

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

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

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

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

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

4、執(zhí)行SHOW COLUMNS/FIELDS、DESCRIBE等SQL命令,因?yàn)樗鼈兊膱?zhí)行結(jié)果用到了BLOB列類型。

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

詳見下例

mysql> set default_tmp_storage_engine = "InnoDB";
-rw-rw---- 1 mysql mysql 8558 Jul 7 15:22 #sql4b0e_10_0.frm -- InnoDB引擎的臨時(shí)表
 -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.frm

mysql> set default_tmp_storage_engine = "MyISAM";
-rw-rw---- 1 mysql mysql 0 Jul 7 15:25 #sql4b0e_10_2.MYD -- MyISAM引擎的臨時(shí)表
 -rw-rw---- 1 mysql mysql 1024 Jul 7 15:25 #sql4b0e_10_2.MYI

mysql> set default_tmp_storage_engine = "MEMORY";
-rw-rw---- 1 mysql mysql 8558 Jul 7 15:26 #sql4b0e_10_3.frm -- MEMORY引擎的臨時(shí)表

總結(jié)

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

您可能感興趣的文章:
  • Mysql臨時(shí)表及分區(qū)表區(qū)別詳解
  • Mysql臨時(shí)表原理及創(chuàng)建方法解析
  • mysql臨時(shí)表用法分析【查詢結(jié)果可存在臨時(shí)表中】
  • MySQL 5.7臨時(shí)表空間如何玩才能不掉坑里詳解
  • 關(guān)于JDBC與MySQL臨時(shí)表空間的深入解析
  • MySQL臨時(shí)表的簡單用法介紹
  • MySQL中Update、select聯(lián)用操作單表、多表,及視圖與臨時(shí)表的區(qū)別
  • MySQL兩種臨時(shí)表的用法詳解
  • 淺談MySQL臨時(shí)表與派生表
  • MySQL中臨時(shí)表的基本創(chuàng)建與使用教程
  • MySQL中關(guān)于臨時(shí)表的一些基本使用方法
  • MySQL使用臨時(shí)表加速查詢的方法
  • MySQL中臨時(shí)表的使用示例

標(biāo)簽:佛山 蘭州 黔南 賀州 南充 黃山 宿遷 馬鞍山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL問答系列之什么情況下會用到臨時(shí)表》,本文關(guān)鍵詞  MySQL,問答,系列,之,什么,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL問答系列之什么情況下會用到臨時(shí)表》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL問答系列之什么情況下會用到臨時(shí)表的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    敦煌市| 班戈县| 广南县| 宁晋县| 彭阳县| 那坡县| 会同县| 桂东县| 章丘市| 东乌珠穆沁旗| 龙门县| 张北县| 会同县| 山东| 南靖县| 和硕县| 西宁市| 历史| 宣化县| 枣庄市| 阜阳市| 建阳市| 安远县| 肇州县| 唐山市| 宽甸| 铜鼓县| 时尚| 阳高县| 会东县| 华容县| 高平市| 曲阳县| 绿春县| 嘉兴市| 鄂温| 刚察县| 连平县| 运城市| 阜宁县| 湖口县|