"सर्वोत्तम अभ्यास"
आप जो कुछ भी करते हैं, उसे किसी फ़ंक्शन में लपेटें, उदा। seconds_between (from_date, to_date)
- इससे कोई फर्क नहीं पड़ता कि यह कैसे करता है (सबसे कुशल तरीका चुनें) - तब यह पूरी तरह से स्पष्ट हो जाएगा कि आपका कोड क्या कर रहा है।
प्रदर्शन
मैंने नीचे दिए गए परीक्षण मामले के साथ अपने लैपटॉप (WinXP) पर 11gR1 पर दो विधियों का परीक्षण किया। ऐसा लगता है कि CAST विकल्प सबसे तेज़ है। (t1 आधार रेखा है, t2 ने extract
का उपयोग किया है विधि, t3 ने cast
. का उपयोग किया विधि)
t1 (nothing) 3
t2 (extract) 338
t3 (cast) 101
t1 (nothing) 3
t2 (extract) 336
t3 (cast) 100
परीक्षण स्क्रिप्ट
declare
x TIMESTAMP := SYSTIMESTAMP;
y TIMESTAMP := TRUNC(SYSDATE);
n PLS_INTEGER;
lc CONSTANT PLS_INTEGER := 1000000;
t1 PLS_INTEGER;
t2 PLS_INTEGER;
t3 PLS_INTEGER;
begin
t1 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := i;
end loop;
t1 := DBMS_UTILITY.get_time - t1;
t2 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := extract(day from (x-y))*24*60*60
+ extract(hour from (x-y))*60*60
+ extract(minute from (x-y))*60
+ extract(second from (x-y));
end loop;
t2 := DBMS_UTILITY.get_time - t2;
t3 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := ( CAST( x AS DATE ) - CAST( y AS DATE ) ) * 86400;
end loop;
t3 := DBMS_UTILITY.get_time - t3;
dbms_output.put_line('t1 (nothing) ' || t1);
dbms_output.put_line('t2 (extract) ' || t2);
dbms_output.put_line('t3 (cast) ' || t3);
end;