开发者社区> xaubllxwtvaqiu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[MySQL FAQ]系列 — 什么情况下会用到临时表

简介: [MySQL FAQ]系列 — 什么情况下会用到临时表
+关注继续查看

MySQL在以下几种情况会创建临时表:

1、UNION查询;

2、用到TEMPTABLE算法或者是UNION查询中的视图;

3、ORDER BY和GROUP BY的子句不一样时;

4、表连接中,ORDER BY的列不是驱动表中的;

5、DISTINCT查询并且加上ORDER BY时;

6、SQL中用到SQL_SMALL_RESULT选项时;

7、FROM中的子查询;

8、子查询或者semi-join时创建的表;


EXPLAIN 查看执行计划结果的 Extra 列中,如果包含 Using Temporary 就表示会用到临时表。


当然了,如果临时表中需要存储的数据量超过了上限( tmp-table-sizemax-heap-table-size 中取其大者),这时候就需要生成基于磁盘的临时表了。


在以下几种情况下,会创建磁盘临时表:

1、数据表中包含BLOB/TEXT列;

2、在 GROUP BY 或者 DSTINCT 的列中有超过 512字符 的字符类型列(或者超过 512字节的 二进制类型列,在5.6.15之前只管是否超过512字节);

3、在SELECT、UNION、UNION ALL查询中,存在最大长度超过512的列(对于字符串类型是512个字符,对于二进制类型则是512字节);

4、执行SHOW COLUMNS/FIELDS、DESCRIBE等SQL命令,因为它们的执行结果用到了BLOB列类型。


从5.7.5开始,新增一个系统选项 internal_tmp_disk_storage_engine 可定义磁盘临时表的引擎类型为 InnoDB,而在这以前,只能使用 MyISAM。而在5.6.3以后新增的系统选项 default_tmp_storage_engine 是控制 CREATE TEMPORARY TABLE 创建的临时表的引擎类型,在以前默认是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.frm

mysql> 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.MYI

mysql> set default_tmp_storage_engine = "MEMORY";
-rw-rw---- 1 mysql mysql 8558 Jul 7 15:26 #sql4b0e_10_3.frm -- MEMORY引擎的临时表

            </div>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MYSQL 5.7中临时文件的使用
使用临时文件 一、使用tmpdir 1、执行计划file sort    文件名字MY开头 lsof|grep delete 如:/tmp/MYdRH1GW (deleted) 2、大事物binary log缓存 文件名字ML开头 lsof|grep de...
657 0
更精确地预估到达时间,滴滴新研究提出异质时空图卷积网络
「师傅,还有多长时间能到啊?」在打的赶往目的地时,我们经常会问这样一个问题。但如果我们打的是滴滴,这个问题就不用开口问了。因为,滴滴的研究者正不断挑战更加精确的到达时间预估结果,相关结果被 KDD 2020 接收为Oral论文。
0 0
[MySQL FAQ]系列 — 什么情况下会用到临时表
[MySQL FAQ]系列 — 什么情况下会用到临时表
0 0
[MySQL FAQ]系列 — 什么情况下会用到临时表
[MySQL FAQ]系列 — 什么情况下会用到临时表
0 0
[MySQL FAQ]系列 — 什么情况下会用到临时表
[MySQL FAQ]系列 — 什么情况下会用到临时表
0 0
[MySQL FAQ]系列 — 什么情况下会用到临时表
[MySQL FAQ]系列 — 什么情况下会用到临时表
0 0
机器人视觉认知能力将取代人类?ModelScope开源mPLUG模型带你一键体验大火的视觉问答能力
ModelScope上开源了达摩院众多业界最强多模态模型,其中就有首超人类的多模态视觉问答模型mPLUG,小编带大家一起体验下多模态预训练模型的能力。
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL表和索引优化实战
立即下载
MySQL 5.7让优化更轻松
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载