我已经优化使用临时表中的复杂的Oracle声明是这样的:与临时表优化的SQL语句的Oracle
原:
SELECT data FROM table WHERE ..complex statement..;
优化(我也无法使用关键字,因为我处理的是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;
问题是:我必须在新的数据库上执行这些语句。最好是删除并创建临时表,或者仅在存在时截断它?我怎样才能处理这个额外的表格?
只是为了完整:处理复杂Oracle语句的另一种方法是使用WITH子句,例如:WITH temptab AS(SELECT * FROM temp)SELECT data FROM temptab WHERE ..complex语句..; - 在一个SQL而不是INSERT + SELECT中完成工作通常会更高效。 – 2009-08-27 11:32:03
你怎么知道使用临时表已经优化了任何东西?它们带来了巨大的开销 - 将数据写入临时表空间 - 所以一般来说,它们只有在初始SELECT代价高昂时/ /后续处理需要多次执行该查询才值得。在投入生产之前,这绝对值得您进行基准测试。 – APC 2009-08-30 09:31:21