Logic/Branch Ordering in PL/SQL
This article demonstrates the affect of branch ordering on the performance of CASE and ELSIF statements.
oracle miscconfigurationintermediate
by OracleDba
17 views
This article demonstrates the affect of branch ordering on the performance of CASE and ELSIF statements.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
SET SERVEROUTPUT ON
DECLARE
l_loops NUMBER := 1000000;
l_value VARCHAR2(1) := 'A';
l_start NUMBER;
BEGIN
-- Time CASE first.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
CASE l_value
WHEN 'A' THEN
NULL;
WHEN 'B' THEN
NULL;
WHEN 'C' THEN
NULL;
WHEN 'D' THEN
NULL;
WHEN 'E' THEN
NULL;
END CASE;
END LOOP;
DBMS_OUTPUT.put_line('CASE first : ' ||
(DBMS_UTILITY.get_time - l_start));
-- Time CASE first.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
CASE l_value
WHEN 'B' THEN
NULL;
WHEN 'C' THEN
NULL;
WHEN 'D' THEN
NULL;
WHEN 'E' THEN
NULL;
WHEN 'A' THEN
NULL;
END CASE;
END LOOP;
DBMS_OUTPUT.put_line('CASE last : ' ||
(DBMS_UTILITY.get_time - l_start));
END;
/
CASE first : 5
CASE last : 20
PL/SQL procedure successfully completed.
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
SET SERVEROUTPUT ON
DECLARE
l_loops NUMBER := 1000000;
l_value VARCHAR2(1) := 'A';
l_start NUMBER;
BEGIN
-- Time ELSIF first.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
IF l_value = 'A' THEN
NULL;
ELSIF l_value = 'B' THEN
NULL;
ELSIF l_value = 'C' THEN
NULL;
ELSIF l_value = 'D' THEN
NULL;
ELSIF l_value = 'E' THEN
NULL;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('ELSIF first: ' ||
(DBMS_UTILITY.get_time - l_start));
-- Time ELSIF last.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
IF l_value = 'B' THEN
NULL;
ELSIF l_value = 'C' THEN
NULL;
ELSIF l_value = 'D' THEN
NULL;
ELSIF l_value = 'E' THEN
NULL;
ELSIF l_value = 'A' THEN
NULL;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('ELSIF last : ' ||
(DBMS_UTILITY.get_time - l_start));
END;
/
ELSIF first: 5
ELSIF last : 18
PL/SQL procedure successfully completed.
SQL>Please to add comments
No comments yet. Be the first to comment!