2017-02-23 63 views
-2

我正在處理pl/sql代碼。請幫助計算時間以下兩種方法。此Oracle查詢需要多少額外的計算時間?

方法1:

if count(x)>1 
then 
    select sum(price) into vprice from table1 where x between var1 and var2; 
else 
    select price into vprice from table1 where x=var1; 
end; 

方法2:

select sum(price) from table1 where x between var1 and var2; 

我們確定基於其它條件的代碼以上某處VAR1和VAR2的值。五種情況中大約四種情況下,var1和var2的值將相同。

P.S .:請忽略任何語法或邏輯錯誤。我嘗試瞭解我的計劃中發生了什麼,以瞭解實現更高效率的更好方法。

+1

你就不能進行測試,以發現的? –

+2

Method1似乎根據某個值執行兩個查詢之一。 '如果count(x)> 1'不是有效的PL/SQL,我知道你說我忽略了,但我不知道它要做什麼。 Method2似乎與Method1中的第一個查詢類似。這兩種'方法'與'計算時間'有什麼關係,不管它是什麼,都不清楚。 –

+1

我假設你問是否用'='而不是'between'(如果有的話)節省了多餘的PL/SQL邏輯來決定要遵循哪個分支? –

回答

-1
DECLARE 
    tsStartTime TIMESTAMP; 
    tsEndTime TIMESTAMP; 
BEGIN 
    -- Start the timer 
    tsStartTime := CURRENT_TIMESTAMP; 
    DBMS_OUTPUT.PUT_LINE(tsStartTime); 

    -- DO SOMETHING HERE WHICH YOU WANT TO TIME <------ 

    -- Display some information, and how long "something" took 
    tsEndTime := CURRENT_TIMESTAMP; 
    DBMS_OUTPUT.PUT_LINE(tsEndTime); 

    DBMS_OUTPUT.PUT_LINE('Time elapsed:' || to_char(tsEndTime - tsStartTime)); 
END; 
/
0
EXPLAIN PLAN FOR select sum(price) from table1 where x between var1 and var2; 
SELECT * FROM TABLE (dbms_xplan.display); -- take this output and compare it to the next one 

EXPLAIN PLAN FOR select price from table1 where x=var1; 
SELECT * FROM TABLE (dbms_xplan.display); -- compare it to this output 
+0

上面給出了估計的執行計劃,以獲得實際的 - 請參閱或者,您可以使用http://stackoverflow.com/questions/14480264/get-runtime-execution-plan-of-a-query – user1327961