使用临时表优化的SQL Oracle语句

时间:2009-08-26 16:02:21

标签: oracle temp-tables

我使用临时表优化了复杂的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;

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

2 个答案:

答案 0 :(得分:4)

您的临时表数据仅在交易范围内可见。

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

每次运行查询时都不需要创建表:只需创建一次。

TRUNCATE中的{p> Oracle是一个DDL操作(它提交它运行的事务)。

答案 1 :(得分:0)

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

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

有关临时表here的更多信息。