存储过程中的MySQL临时表与内存表对比

10

在存储过程中使用什么更好:临时表还是内存表?

该表用于存储报告的汇总数据。

开发人员应该注意哪些权衡之间的折衷?

CREATE TEMPORARY TABLE t (avg (double));

或者

CREATE TABLE t (avg (double)) ENGINE=MEMORY;

内存在ORACLE中是同一个GLOBAL TEMPORARY吗? - zloctb
5个回答

11
为什么只限于这两个选项?你可以这样做:
CREATE TEMPORARY TABLE t (avg double) ENGINE=MEMORY;

这个方法可行,但我不确定如何检查内存引擎是否真正被使用。


7

在这两者之间,我会为报告使用临时表。

内存表跨用户会话和连接保存数据,因此您每次都必须截断它,以确保您不会使用其他人的数据。假设您根据自己的需求放置了维护内存表所需的内容,那么它是可以使用的 - 从维护的角度来看,临时表略微更加安全。


5

临时表仅在您的会话期间存在。使用Engine=Memory声明的表将跨用户会话/连接持久存在,但仅存在于MySQL实例的生命周期中。因此,如果MySQL重新启动,则该表将消失。


2

我想指出的是,在2021年使用MariaDB-10.3.27时,@biziclop所说的代码不再有效,现在可以这样做:

CREATE TEMPORARY TABLE tmp1 AS
SELECT * FROM products LIMIT 10;
SELECT * FROM tmp1, tmp1 AS t2;

我刚刚进行了测试。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接