第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?

【MySQL 每日一技】使用 Python 执行 SQL 语句并获取结果集 阅读详情

问题:

MySQL 在处理临时结果集(UNION 运算 / 聚合运算等)时,会用到内部临时表(internal temporary table)。
那么内部临时表会使用多少内存呢?

 

实验:

我们先创建一个测试用的数据库,

然后准备好数据,

我们使用一个带 UNION 的子表,使执行计划会使用内部临时表:

可以看到执行计划确实使用了临时表:

下面我们另起一个 session,用 performance_schema 对内存进行观察:

在主 session 中,探查其连接号,并找到线程号:

在 performance_schema 中,确认其内存分配的统计初始状态:

在主 session 中执行 SQL:

在 performance_schema 中,查看其内存分配:

可知在这个 SQL 的处理过程中,总共分配了 4M 多的内存用于内部临时表:

我们都知道内存临时表是 memory(heap) 引擎格式的表,那我们手工建一个显式的内存表,应当和内存临时表使用的内存相同,来试验一下。

在主 session 中创建一张内存表,将数据插入到内存表中:


观察 performance_schema 可知:内存表驻留在内存里的字节数与之前临时表使用的字节数相同。


结论

我们通过 performance_schema 观察了 memory 引擎的内存分配,由此推算了内部临时表的内存占用情况。

MySQL 在其他元数据中,诸如 information_schema.INNODB_TEMP_TABLE_INFO 中,并不展示内部临时表的信息,如图:

另外值得注意的是:memory 引擎会多划分出不少空间,比如本例中我们的数据是 300025 行 * 4 字节 =~ 1.2M,而引擎分出了 4M 多的内存来进行存储。

因此如果进行估算时,需要将数据量乘以一个较大的系数,才能准确估算。


小贴士:
我们是第二次用到了 dbdeployer,介绍一下其身世:
dbdeployer 的前身是著名的 mysql-sandbox,是著名博主 Giuseppe Maxia 的扛鼎之作(http://datacharmer.blogspot.com),可以极其方便地搭建 MySQL 多种架构的测试环境,命令简单优雅。
今后在实验中,我们会多次用到 dbdeployer,或者使用 MySQL 容器进行快速搭建和试验。


【Mysql系列】MySQL临时表、序列使用、如何处理重复的数据 阅读详情

相关推荐

WorkBuddy任务对话上下文管理:Token、compact与上下文窗口实战指南

在大语言模型应用中,Token作为文本处理的最小单位,直接决定上下文窗口的消耗速度,而上下文窗口则限定了单次对话可承载的信息总量。当对话超出窗口限制时,compact压缩机制会触发有损摘要,导致关键约束丢失或工具调用结果被稀释。合理管理上下文不仅能提升多步骤任务的稳定性,还能显著降低Token成本与响应延迟。在文档处理、代码开发、多步自动化等场景中,通过主动压缩、状态外置、分段喂入等策略,可有效避免任务后期遗忘、版本混乱等问题。本文围绕WorkBuddy的上下文管理机制,从Token与compact的底层原

weixin_29055699的博客 389

MySQL查看表占用空间大小

通过SQL查看MySQL表占用空间大小

东境物语 2万+

ANSYS拓扑优化基础实例

唐深51CAE 2018/6/10 拓扑优化在工程设计中,常用于机械结构概念设计和轻量化设计,ANSYS通用有限元分析软件提供了强大的拓扑优化功能,本文将通过一个简单实例进行展示。 一、赵州桥 赵州桥又称安济桥,坐落在河北省赵县洨河上,建于隋朝年间公元595年~605年,由著名匠师李春设计建造,距今已有约1500年的历史,是当今世界上现存最早、保存最完整的古代敞...

TQT_CAE的博客 6026

MySQL临时表详细解释

MySQL临时表详细解释 1.1 临时表简介 MySQL临时表在很多场景中都会用到,比如用户自己创建的临时表用于保存临时数据,以及MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作。临时表的作用仅限于本次会话,等连接关闭后重新打开连接临时表将不存在。 1.2 临时表类型 1.2.1 外部临时表 通过create temporary table语句创建的临时表为外部临时表,在创建时可以手动指定临时表的存储引擎。 create temporary table temp_table( i

緑水長流*z 2万+

UE5.4像素流送实战:GPU驱动、WebRTC与系统级调优全解析

像素流送是将实时3D渲染画面通过WebRTC编码推流至浏览器的关键技术,其本质是GPU硬件编码(如NVENC)与低延迟网络传输(UDP+BBR)的深度协同。理解其原理需跨越图形API(Vulkan/DX12)、实时音视频(H.264/H.265)、WebRTC信令与NAT穿透四大技术层。技术价值在于突破终端算力限制,支撑远程工业仿真、云VR看房等高交互场景;但落地难点集中于基础设施层——如NVIDIA驱动与UE5.4.3的CUDA Toolkit 12.2兼容性、Linux内核TCP/UDP参数调优、GPU

weixin_32943857的博客 615

从理论到实践:基于Zemax的高分辨率生物显微镜光学系统仿真与优化指南

本文详细介绍了基于Zemax的高分辨率生物显微镜光学系统仿真与优化全流程。从阿贝分辨率公式、柯勒照明等理论基础出发,逐步讲解Zemax建模、像差优化、制造可行性分析等核心步骤,并提供常见问题解决方案。通过实际案例展示如何将理论设计转化为可制造的优化方案,帮助工程师掌握从仿真到实际应用的关键技术。

weixin_29229989的博客 480

Mysql八股文

Mysql知识点总结

Fax5210的博客 605

翁恺-C语言程序设计 PTA习题集

代码练习题

qq_46085472的博客 7640

mysql临时表是否占用空间_第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?...

问题:MySQL 在处理临时结果集(UNION 运算 / 聚合运算等)时,会用到内部临时表(internal temporary table)。那么内部临时表会使用多少内存呢?实验:我们先创建一个测试用的数据库,然后准备好数据,我们使用一个带 UNION 的子表,使执行计划会使用内部临时表:可以看到执行计划确实使用了临时表:下面我们另起一个 session,用 performance_schema...

weixin_36001279的博客 289

解锁Vscode:C/C++环境配置超详细指南

本文详细介绍如何在 VSCode 中配置 C/C++ 开发环境,帮助开发者快速搭建高效的编码调试环境。内容涵盖前期准备、软件下载安装、环境变量配置、工作区文件设置及测试运行全流程:首先需准备 VSCode 编辑器、MinGW-w64 编译器及 C/C++ 插件;接着完成工具下载与安装,配置系统环境变量以确保编译器可全局调用;然后通过创建.vscode工作区文件夹,配置核心文件,实现代码智能提示与调试功能;最后通过编写 Hello World 示例验证环境可用性,并附上常见问题排查方案。

邓邓子的博客 3046

Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.7 摄像头V4L2驱动开发流程总结

1.概述前几章对摄像头V4L2驱动开发各个环节做了展开分析,这一章节就做一个汇总,用来回顾前几章得知识点,概括一下摄像头开发得流程,本次使用RK3399。2.SensorSub-device开发移植Sensor驱动位于目录下,注意到本章节所描述的是具有属性的sensor驱动,故目录下的驱动并不适用。在结构下,Sensor一般作为sub-device并通过pad与cif、isp或者mipiphy链接在一起。本章主要介绍Sensor驱动的代码[1],dts配置,及如何验证sensor5个部分。...

DSMGUOGUO的博客 3726

MySQL 内部 临时表 图文 详解

MySQL 内部 临时表 图文 详解 文章目录MySQL 内部 临时表 图文 详解1. 准备工作2. 哪些场景会用到临时表?3. 临时表用哪种存储引擎?4. 内存临时表变磁盘临时表5. 写入哪些字段到临时表?6. 为哪些字段建立索引?6.1 group by6.2 distinct6.3 hash 字段7. 内部临时表使用情况统计8. 小结总结 MySQL 临时表分为两种:外部临时表、内部临时表。用户通过 CREATE TEMPORARY TABLE 创建的是外部临时表。SQL 语句执行过程中 MySQL

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 8591

卷积码Viterbi译码算法原理及C语言实现

具体而言,卷积码的编码过程是将输入数据和编码器中的状态进行异或操作,输出码字为各个状态对应的结果。Viterbi译码算法是一种最大似然译码算法,根据接收到的含有噪声的码字,寻找出最有可能的原始数据序列。(2) 递推计算:根据接收到的码字和当前状态,计算下一时刻各个状态的路径度量,并记录每个状态的前驱状态。以上代码实现了一个简单的卷积码Viterbi译码算法,通过接收到的码字进行译码,并输出解码结果。(1) 初始化:将所有状态的路径度量初始化为一个很大的值,选择路径度量最小的状态作为起始状态。

2301_79331421的博客 825

mysql 临时表_第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?...

问题:MySQL 在处理临时结果集(UNION 运算 / 聚合运算等)时,会用到内部临时表(internal temporary table)。那么内部临时表会使用多少内存呢?实验:我们先创建一个测试用的数据库,然后准备好数据,我们使用一个带 UNION 的子表,使执行计划会使用内部临时表:可以看到执行计划确实使用了临时表:下面我们另起一个 session,用 performance_schema...

weixin_39770506的博客 65

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

mysql 临时表 内存_第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?...

问题:MySQL 在处理临时结果集(UNION 运算 / 聚合运算等)时,会用到内部临时表(internal temporary table)。那么内部临时表会使用多少内存呢?实验:我们先创建一个测试用的数据库,然后准备好数据,我们使用一个带 UNION 的子表,使执行计划会使用内部临时表:可以看到执行计划确实使用了临时表:下面我们另起一个 session,用 performance_schema...

weixin_42328834的博客 113

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

第06问:内部临时表何时使用磁盘?

问题: 在实验 05中,我们看到了内部临时表会使用到不少内存。 那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的? 实验: 我们仍使用实验 05中的环境,略去准备数据的过程。 我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察: 主会话线程号为 ...

ActionTech的博客 270

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mysql如何读取临时数据_MySQL 内存表和临时表的用法详解

内存表:session 1$ mysql -urootroot@(none) 10:05:06>use testDatabase changedroot@test 10:06:06>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;Query OK, 0 rows affected (0.00 sec)root@test 10:08:46&...

weixin_33999969的博客 641

MySQL的临时表到底是什么?一共包含哪些部分?

场景是否使用临时表示例代码复杂查询的中间结果✅多次使用的子查询✅先将子查询结果存入临时表,再多次查询临时表GROUP BY + ORDER BY 组合❌(尽量优化)数据量小但需频繁操作的数据集✅将常用数据存入临时表,减少对原表的访问临时表的本质临时存储中间结果:像老师发作业前的分拣桌子,让操作更高效。双刃剑:用得好提升性能,用不好增加磁盘 I/O。简单来说临时表就像老师的“小助手桌子”,把常用的作业本提前整理好,发作业更快!

长风破浪会有时的博客 951

mysql 临时表增加主键_MySQL内部临时表何时使用磁盘-爱可生

问题:在 实验 05 中,我们看到了内部临时表会使用到不少内存。那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的?实验:我们仍使用 实验 05 中的环境,略去准备数据的过程。我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察:主会话线程号为 29,将 performance_sch...

weixin_39752788的博客 256

mysql临时表是否占用空间_MySQL内部临时表何时使用磁盘-爱可生

原标题:MySQL内部临时表何时使用磁盘-爱可生问题:在 实验 05 中,我们看到了内部临时表会使用到不少内存。那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的?实验:我们仍使用 实验 05 中的环境,略去准备数据的过程。我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察:主会话线...

weixin_34570507的博客 383

mysql 创建临时内存表_MySQL 内存表和临时表的用法详解

内存表:session 1$ mysql -urootroot@(none) 10:05:06>use testDatabase changedroot@test 10:06:06>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;Query OK, 0 rows affected (0.00 sec)root@test 10:08:46&...

weixin_42515302的博客 949

【项目实践05】【MySQL 临时表导致磁盘占用100%】

本系列用来记录一些在实际项目中的小东西,并记录在过程中想到一些小东西,因为是随笔记录,所以内容不会过于详细。某年某月某日清晨,某台服务器磁盘告警,使用率达到100%导致服务崩溃。告警的服务器仅仅用来安装了几个中间件,包括 MySQL、RabbitMQ、Nacos等,其中可能产生大量落盘的只有 MySQL 数据落盘 或者 RabbitMQ 消息堆积。通过。

猫吻鱼的博客 2068

mysql中临时字段_MySQL临时表

当你创建临时表的时候,你可以使用temporary关键字。如:create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null)‘或CREATE TEMPORARY TABLE IF NOT EXISTS sp_output_tmp ENGINE = MEMORY SELECT …from … wh...

weixin_29443363的博客 1503

mysql 内部 临时表_MySQL内部临时表何时使用磁盘

问题:在实验 05中,我们看到了内部临时表会使用到不少内存。那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的?实验:我们仍使用实验 05中的环境,略去准备数据的过程。我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察:主会话线程号为 29,将 performance_schem...

weixin_39592240的博客 99
上一篇: 技术分享 | MySQL:从库出现 system lock 的原因
下一篇: 数据传输 | dtle 使用初探
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值