【发布时间】:2010-11-23 01:50:08
【问题描述】:
我已经使用这样的临时表优化了一个复杂的 Oracle 语句:
原创:
SELECT data FROM table WHERE ..complex statement..;
优化(我不能用WITH关键字,因为我处理的是 问题是:我必须在新数据库上执行这些语句。最好删除并创建临时表,或者仅在存在时截断它?我该如何处理这个额外的表? 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;
【问题讨论】:
-
为了完整起见:处理复杂的 Oracle 语句的另一种方法是使用 WITH 子句,例如: WITH temptab AS (SELECT * FROM temp) SELECT data FROM temptab WHERE ..complex statement.. ; - 在一个 SQL 中而不是 INSERT+SELECT 中完成工作通常会更有效。
-
你怎么知道临时表的使用已经优化了任何东西?它们带来了巨大的开销 - 将数据写入临时表空间 - 所以通常它们只有在初始 SELECT 昂贵/和/后续处理需要多次执行该查询时才值得。在将其投入生产之前,绝对值得进行基准测试。
标签: oracle temp-tables