在什么情况下会使用mysql临时表

59次阅读
没有评论

共计 1106 个字符,预计需要花费 3 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍在什么情况下会使用 mysql 临时表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

MySQL 在很多情况下都会用到临时表,总结一下什么时候会用到临时表:

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

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

内存临时表空间的大小由两个参数控制:tmp_table_size 和 max_heap_table_size。一般来说是通过两个参数中较小的数来控制内存临时表空间的最大值,而对于开始在内存中创建的临时表,后来由于数据太大转移到磁盘上的临时表,只由 max_heap_table_size 参数控制。针对直接在磁盘上产生的临时表,没有大小控制。

下列操作会使用到临时表:

1ã  union 查询

2ã   对于视图的操作,比如使用一些 TEMPTABLE 算法、union 或 aggregation

3ã   子查询

4ã  semi-join 包括 not in、exist 等

5ã   查询产生的派生表

6ã   复杂的 group by 和 order by

7ã  Insert select 同一个表,mysql 会产生一个临时表缓存 select 的行

8ã   多个表更新

9ã  GROUP_CONCAT() 或者 COUNT(DISTINCT) 语句

。。。

Mysql 还会阻止内存表空间的使用,直接使用磁盘临时表:

1ã   表中含有 BLOB 或者 TEXT 列

2ã   使用 union 或者 union all 时,select 子句有大于 512 字节的列

3ã  Show columns 或者 desc 表的时候,有 LOB 或者 TEXT

4ã  GROUP BY 或者 DISTINCT 子句中包含长度大于 512 字节的列

以上是“在什么情况下会使用 mysql 临时表”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1106字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)