چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
بهبود کارایی دستورات شرطی در Oracle PLsql
مقدمه:
دستورات شرطی در زبان های برنامه نویسی از پر کاربردترین دستورات می باشند و عملا تصمیم گیری برنامه ها بر اساس همین دستورات می باشد. استفاده از این دستورات در مواقعی که با حجم بالایی از داده مواجه می شویم مشکل ساز خواهد بود، عملیات بررسی و تصمیم گیری در این شرایط زمان بر خواهد بود و این مسئله در همه زبان ها مطرح می باشد. با رعایت برخی نکات می توان این عملیات را بهبود بخشید.
در این مستند یکی از این نکات به وسیله PLSQL مورد بررسی قرار خواهد گرفت.
مستندات بیشتر در حوزه اوراکل و خدمات نگهداری پایگاه داده اوراکل در آرتاراد
کد Plsql و بررسی کارایی:
در دستورات شرطی، جایگاه بررسی شرط ها در کد در کارایی بسیار تاثیر گذار خواهد بود. هر چقدر در شرط های اولیه بتوان به نتیجه رسید زمان کمتری استفاده می شود
به کد زیر توجه کنید:
SET SERVEROUTPUT ON
DECLARE
l_loops NUMBER := 2000000;
l_value VARCHAR2(20) := 'Tehran';
l_start NUMBER;
BEGIN
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
IF l_value = 'Tehran' THEN
NULL;
ELSIF l_value = 'Isfahan' THEN
NULL;
ELSIF l_value = 'Shiraz' THEN
NULL;
ELSIF l_value = 'Tabriz' THEN
NULL;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('ELSIF first: ' ||
(DBMS_UTILITY.get_time - l_start));
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
IF l_value = 'Isfahan' THEN
NULL;
ELSIF l_value = 'Shiraz' THEN
NULL;
ELSIF l_value = 'Tabriz' THEN
NULL;
ELSIF l_value = 'Tehran' THEN
NULL;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('ELSIF last : ' ||
(DBMS_UTILITY.get_time - l_start));
END;
/
ELSIF first: 6
ELSIF last : 14
PL/SQL procedure successfully completed.
SQL>
همانطوری که مشاهده می فرمایید در حالت اول که در اولین دستور شرط برقرار می شود زمان کمتر از زمانی می باشد که در دستور آخر شرط برقرار می گردد.
این دستور را با CASE نیز بررسی می کنیم که نتیجه ای مشابه دارد.
SET SERVEROUTPUT ON
DECLARE
l_loops NUMBER := 2000000;
l_value VARCHAR2(20) := 'Tehran';
l_start NUMBER;
BEGIN
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
CASE l_value
WHEN 'Tehran' THEN
NULL;
WHEN 'Isfahan' THEN
NULL;
WHEN 'Shiraz' THEN
NULL;
WHEN 'Tabriz' THEN
NULL;
END CASE;
END LOOP;
DBMS_OUTPUT.put_line('CASE first: ' ||
(DBMS_UTILITY.get_time - l_start));
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
CASE l_value
WHEN 'Isfahan' THEN
NULL;
WHEN 'Shiraz' THEN
NULL;
WHEN 'Tabriz' THEN
NULL;
WHEN 'Tehran' THEN
NULL;
END CASE;
END LOOP;
DBMS_OUTPUT.put_line('CASE last : ' ||
(DBMS_UTILITY.get_time - l_start));
END;
/
CASE first: 5
CASE last : 19
PL/SQL procedure successfully completed.
SQL>
مطلبی دیگر از این انتشارات
مراحل خرید خانه در کانادا
مطلبی دیگر از این انتشارات
زنگ تفریحی کوتاه برای آخر هفته
مطلبی دیگر از این انتشارات
8 گام برای کمک به کارکنان خود برای پذیرش تغییر