在存储过程中使用什么更好:临时表还是内存表?
该表用于存储报告的汇总数据。
开发人员应该注意哪些权衡之间的折衷?
CREATE TEMPORARY TABLE t (avg (double));
或者
CREATE TABLE t (avg (double)) ENGINE=MEMORY;
在存储过程中使用什么更好:临时表还是内存表?
该表用于存储报告的汇总数据。
开发人员应该注意哪些权衡之间的折衷?
CREATE TEMPORARY TABLE t (avg (double));
或者
CREATE TABLE t (avg (double)) ENGINE=MEMORY;
CREATE TEMPORARY TABLE t (avg double) ENGINE=MEMORY;
这个方法可行,但我不确定如何检查内存引擎是否真正被使用。
在这两者之间,我会为报告使用临时表。
内存表跨用户会话和连接保存数据,因此您每次都必须截断它,以确保您不会使用其他人的数据。假设您根据自己的需求放置了维护内存表所需的内容,那么它是可以使用的 - 从维护的角度来看,临时表略微更加安全。
临时表仅在您的会话期间存在。使用Engine=Memory声明的表将跨用户会话/连接持久存在,但仅存在于MySQL实例的生命周期中。因此,如果MySQL重新启动,则该表将消失。
我想指出的是,在2021年使用MariaDB-10.3.27时,@biziclop所说的代码不再有效,现在可以这样做:
CREATE TEMPORARY TABLE tmp1 AS
SELECT * FROM products LIMIT 10;
SELECT * FROM tmp1, tmp1 AS t2;
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'