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

时间:2009-11-20 00:56:03

标签: mysql stored-procedures

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

该表用于存储报告的摘要数据。

开发人员应该注意哪些权衡取舍?

CREATE TEMPORARY TABLE t (avg (double));

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

5 个答案:

答案 0 :(得分:10)

为什么这仅限于两个选项?你可以这样做:

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

哪个有效,虽然我不确定如何检查内存引擎是否实际在这里使用。

答案 1 :(得分:7)

在这两个中,我会使用临时表进行报告。

内存表保存用户会话和数据的数据。连接,所以你必须每次都截断它,以确保你不会使用其他人的数据。假设您根据需要放入了维护内存表所需的内容,这很好 - 从维护的角度来看,临时表更安全一些。

答案 2 :(得分:4)

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

答案 3 :(得分:3)

在MySQL中,临时表严重受损:

http://dev.mysql.com/doc/refman/5.6/en/temporary-table-problems.html

You cannot refer to a TEMPORARY table more than once in the same query.
For example, the following does not work:

mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'

答案 4 :(得分:1)

我只是想指出,在 2021 年使用 MariaDB-10.3.27 时,@biziclop 所说的代码不起作用,情况不再如此,这是可能的:

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

(我刚刚测试过)