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

存储过程中的MySQL临时表与内存表,mysql,stored-procedures,Mysql,Stored Procedures,在存储过程中最好使用什么:临时表还是内存表 该表用于存储报表的摘要数据 开发人员是否应该注意权衡 CREATE TEMPORARY TABLE t (avg (double)); 或 临时表仅在会话期间存在。使用Engine=Memory声明的表将在用户会话/连接之间保持,但仅在MySQL实例的生存期内存在。所以,如果MySQL重新启动,表就会消失。在这两个表中,我会使用一个临时表来生成报告 内存表跨用户会话和连接保存数据,因此每次都必须截断它,以确保不会使用其他人的数据。假设您根据需要输入了

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

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

开发人员是否应该注意权衡

CREATE TEMPORARY TABLE t (avg (double));


临时表仅在会话期间存在。使用Engine=Memory声明的表将在用户会话/连接之间保持,但仅在MySQL实例的生存期内存在。所以,如果MySQL重新启动,表就会消失。

在这两个表中,我会使用一个临时表来生成报告


内存表跨用户会话和连接保存数据,因此每次都必须截断它,以确保不会使用其他人的数据。假设您根据需要输入了维护内存表所需的内容,那么就可以了——从维护的角度来看,临时表更安全一些。

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

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

这是可行的,尽管我不知道如何检查内存引擎是否在这里实际使用。

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


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

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

(我刚刚测试过)

内存在ORACLE中是相同的全局临时内存吗?
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'
CREATE TEMPORARY TABLE tmp1 AS
SELECT * FROM products LIMIT 10;
SELECT * FROM tmp1, tmp1 AS t2;