• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL问答系列之什么情况下会用到临时表

    临时表介绍

    什么是临时表:MySQL用于存储一些中间结果集的表,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。为什么会产生临时表:一般是由于复杂的SQL导致临时表被大量创建

    临时表分为两种,一种是内存临时表,一种是磁盘临时表。内存临时表采用的是memory存储引擎,磁盘临时表采用的是myisam存储引擎(磁盘临时表也可以使用innodb存储引擎,通过internal_tmp_disk_storage_engine参数来控制使用哪种存储引擎,从mysql5.7.6之后默认为innodb存储引擎,之前版本默认为myisam存储引擎)。分别通过Created_tmp_disk_tables 和 Created_tmp_tables 两个参数来查看产生了多少磁盘临时表和所有产生的临时表(内存和磁盘)。

    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-size 或 max-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引擎的临时表

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Mysql临时表及分区表区别详解
    • Mysql临时表原理及创建方法解析
    • mysql临时表用法分析【查询结果可存在临时表中】
    • MySQL 5.7临时表空间如何玩才能不掉坑里详解
    • 关于JDBC与MySQL临时表空间的深入解析
    • MySQL临时表的简单用法介绍
    • MySQL中Update、select联用操作单表、多表,及视图与临时表的区别
    • MySQL两种临时表的用法详解
    • 浅谈MySQL临时表与派生表
    • MySQL中临时表的基本创建与使用教程
    • MySQL中关于临时表的一些基本使用方法
    • MySQL使用临时表加速查询的方法
    • MySQL中临时表的使用示例
    上一篇:关于JDBC与MySQL临时表空间的深入解析
    下一篇:MySQL问答系列之如何避免ibdata1文件大小暴涨
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL问答系列之什么情况下会用到临时表 MySQL,问答,系列,之,什么,