存储过程中的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;