我已經優化使用臨時表中的複雜的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