2013-09-30 88 views
-2

我寫了存儲過程並且需要很長時間才能調用它。 我在'SP'中使用臨時表。 它可以是原因?在存儲過程中使用臨時表

CREATE OR REPLACE PROCEDURE TEST_SP 
IS 
BEGIN 
INSERT INTO MYTEMP_table (A, B) 
     ( SELECT id AS CUSTOMER_NO, 
       ACC_NO AS ACCOUNT_NO 
      FROM myTable); 
UPDATE MYTEMP_table 
     SET MYTEMP_table.A = 
      ( SELECT MIN (BRH_DATE) 
        FROM CUSTOMER,) 



    UPDATE MYTEMP_table 
     SET MYTEMP_table.B = 
      ( SELECT MIN (SUBSTR (ENTRY_DATE, 0, 8)) 
        FROM INFO) 
       ....... 

MYTEMP_table是臨時表。

+1

是的,它可以,然後它可能是完全不同的東西。這些信息很難回答。拋硬幣。 –

+0

我可以用什麼來代替臨時表?我怎樣才能解決它,而不使用臨時表 – Vaseph

+0

主要的性能影響不太可能是由於使用臨時表造成的。這通常是寫得不好的代碼。 – haki

回答

2

此代碼片段看起來嚴重不完整。似乎很奇怪,你是一個查詢填充臨時表:

select id, acc_no from myTable 

,然後用一個值消滅所有列:

UPDATE MYTEMP_table 
SET MYTEMP_table.A = 
     ( SELECT MIN (BRH_DATE) 
      FROM CUSTOMER,) 

您的文章是不明確的,但希望你使用全局臨時表(基於內存)而不是臨時存儲的物理表。對同一行進行多次寫入是減慢工作速度的一種可靠的方式(更重要的是,在物理表中,但仍然很慢)。如果可能的話,考慮以下因素:

  1. 使用分析功能或者更復雜的初始查詢來獲取所有你的寫作做了前面...
  2. 如果你不舒服/熟悉跑步/閱讀解釋計劃,請嘗試在SQL編輯器中手動運行每個SQL語句以評估其個人性能...