MySQL使用临时表的情况
2017-01-16 11:13
281 查看
原文地址:http://www.tuicool.com/articles/BBRFN3B
EXPLAIN 查看执行计划结果的 Extra 列中,如果包含 Using
Temporary 就表示会用到临时表。
当然了,如果临时表中需要存储的数据量超过了上限( tmp-table-size 或 max-heap-table-size 中取其大者),这时候就需要生成基于磁盘的临时表了。
从5.7.5开始,新增一个系统选项 internal_tmp_disk_storage_engine 可定义磁盘临时表的引擎类型为
InnoDB,而在这以前,只能使用 MyISAM。而在5.6.3以后新增的系统选项 default_tmp_storage_engine是控制 CREATE
TEMPORARY TABLE 创建的临时表的引擎类型,在以前默认是MEMORY,不要把这二者混淆了。
见下例:
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引擎的临时表
相关文章推荐
- 解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题
- 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能
- MySQL的临时表使用注意事项
- mysql 在国外facebook,flickr等公司内的使用情况
- mysql大文本数据类型的使用需要考虑实际情况
- 销量排名,使用临时表,不使用函数和变量情况下的实现
- 在两三年前,选择数据库是一件非常容易的事。资金充足的企业会选择甲骨文数据库,使用微软产品的企业通常SQL Server,而预算不足企业则会选择MySQL。不过,如今的情况已经大不相同了。 最近两三年
- 使用ODI进行数据整合过程中的数据源、目标与临时区域(staging area)的分布情况与执行方式
- 使用tmpfs存放MySQL的临时文件的问题一则
- 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能
- 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能
- (mysql)临时表的使用
- MySQL里,不能重复使用临时表的BUG竟然还没有解决
- mysql 在国外facebook,flickr等公司内的使用情况
- Mysql存储过程(六)——存储过程中使用临时表
- Mysql中的临时表使用方法讲解
- 安装使用MySQL时一个典型错误的解决、临时记录下
- mysql 查看索引使用情况
- Mysql中的临时表使用方法(转)
- 使用mysql自有的表分析innodb死锁情况