1

我已经使用这样的临时表优化了一个复杂的 Oracle 语句:

原文

SELECT data FROM table WHERE ..complex statement..;

优化(我不能使用 WITH 关键字,因为我处理 < Oracle9i):

CREATE GLOBAL TEMPORARY TABLE temptab (x NUMBER, y DATE) ON COMMIT DELETE ROWS;
INSERT INTO temptab SELECT * FROM temp;
SELECT data FROM temptab WHERE ..complex statement..;
COMMIT;

问题是:我必须在新数据库上执行这些语句。最好删除并创建临时表,或者仅在存在时截断它?我该如何处理这个额外的表?

4

2 回答 2

4

您的临时表数据仅在事务范围内可见。

在您提交或回滚事务(或断开连接并重新连接)后,数据就会消失。

您无需在每次运行查询时都创建表:只需创建一次。

TRUNCATEinOracle是一个DDL操作(它提交它运行的事务)。

于 2009-08-26T16:05:52.400 回答
0

临时表不会消耗数据文件中的内存。临时表分配临时段的内存。会话或事务结束后释放内存。

不需要对临时表进行截断。创建一次并使用它。没有悲伤。

更多关于临时表在这里

于 2009-08-26T21:56:23.287 回答