在存储过程中使用什么更好:临时表或内存表?
该表用于存储报告的摘要数据。
开发人员应该注意哪些权衡取舍?
CREATE TEMPORARY TABLE t (avg (double));
或
CREATE TABLE t (avg (double)) ENGINE=MEMORY;
答案 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;
(我刚刚测试过)