?? 第五章 pl-sql集合與記錄(2) - pl-sql用戶指南與參考 - whatiswhat.htm
字號:
<!-- 0 --></LI>
<LI class=ul0><A class=list1
href="http://blog.chinaunix.net/u1/44734/article.html">文章</A>
<UL class=ul1>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_78214.html">·
數據庫 <FONT face="Wingdings 3">}</FONT></A>
<UL class=ul2>
<LI><A
href="http://blog.chinaunix.net/u1/44734/article_82530.html">·
PL/SQL用戶指南與參考<!-- a82530 --></A><!-- 82530 --> </LI></UL>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62688.html">·
FreeBSD<!-- a62688 --></A><!-- 62688 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62693.html">·
文摘<!-- a62693 --></A><!-- 62693 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_82547.html">·
JavaScript<!-- a82547 --></A><!-- 82547 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_83441.html">·
Linux <FONT face="Wingdings 3">}</FONT></A>
<UL class=ul2>
<LI><A
href="http://blog.chinaunix.net/u1/44734/article_83906.html">· VIM<!-- a83906 --></A><!-- 83906 --> </LI></UL>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62689.html">·
雜談<!-- a62689 --></A><!-- 62689 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_89165.html">·
Windows<!-- a89165 --></A><!-- 89165 --> </LI></UL></LI>
<LI class=ul0><A class=list1
href="http://blog.chinaunix.net/u1/44734/index.html">首頁</A> </LI></UL></TD>
<TD width=10></TD></TR>
<TR>
<TD colSpan=4>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width=980 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function $(s){return document.getElementById(s);}function ShowHideDiv(divid,iImg){if($(divid).style.display == "none"){iImg.src="../../templates/newgreen/images/dot2.gif";$(divid).style.display = "block";iImg.title="收起";}else{iImg.src="../../templates/newgreen/images/dot4.gif";$(divid).style.display = "none";iImg.title="展開";}}navHover();</SCRIPT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=3></TD></TR></TBODY></TABLE><BR>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD width=18 height=28><IMG alt=""
src="第五章 PL-SQL集合與記錄(2) - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_left_top.gif"
border=0></TD>
<TD
background="第五章 PL-SQL集合與記錄(2) - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_top.gif">
<P style="MARGIN: 5px; LINE-HEIGHT: 150%"></P></TD>
<TD width=18 height=28><IMG alt=""
src="第五章 PL-SQL集合與記錄(2) - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_right_top.gif"
border=0></TD></TR>
<TR>
<TD width=18
background="第五章 PL-SQL集合與記錄(2) - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_left.gif"></TD>
<TD align=middle bgColor=#f5fdee><BR><FONT style="FONT-SIZE: 14pt"
color=#295200><B>第五章 PL/SQL集合與記錄(2)</B></FONT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#a5bd6b cellSpacing=1
cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD align=middle>
<TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle>
<TABLE
style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV id=art style="MARGIN: 15px">
<P class=title1>十二、使用集合批量綁定減少循環開銷</P>
<P>如下圖所示,PL/SQL引擎會執行過程化語句,但它把SQL語句發送給SQL引擎處理,然后SQL引擎把處理的結果返回給PL/SQL引擎。</P><IMG
alt=""
src="第五章 PL-SQL集合與記錄(2) - PL-SQL用戶指南與參考 - whatiswhat.files/o_5-3.gif">
<P>PL/SQL和SQL引擎間的頻繁切換會大大降低效率。典型的情況就是在一個循環中反復執行SQL語句。例如,下面的DELETE語句就會在FOR循環中被多次發送到SQL引擎中去:</P>
<BLOCKQUOTE>
<TABLE>
<TBODY>
<TR>
<TD
noWrap><STRONG>DECLARE</STRONG><BR> <STRONG>TYPE</STRONG> numlist <STRONG>IS</STRONG> VARRAY(20) <STRONG>OF</STRONG> <STRONG>NUMBER</STRONG>;<BR><BR> depts numlist := numlist(10, 30, 70); <EM>-- department numbers</EM><BR><STRONG>BEGIN</STRONG><BR> ...<BR> <STRONG>FOR</STRONG> i <STRONG>IN</STRONG> depts.FIRST .. depts.LAST <STRONG>LOOP</STRONG><BR> <STRONG>DELETE</STRONG> <STRONG>FROM</STRONG> emp<BR> <STRONG>WHERE</STRONG> deptno = depts(i);<BR> <STRONG>END</STRONG> <STRONG>LOOP</STRONG>;<BR><STRONG>END</STRONG>;
</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P> </P>這種情況下,如果SQL語句影響了四行或更多行時,使用批量綁定就會顯著地提高性能。
<P> </P>
<P class=title2>1、批量綁定如何提高性能</P>
<P>用SQL語句中為PL/SQL變量賦值稱為綁定,PL/SQL綁定操作可以分為三種: </P>
<OL>
<LI>內綁定(in-bind):用INSERT或UPDATE語句將PL/SQL變量或主變量保存到數據庫。
<LI>外綁定(out-bind):通過INSERT、UPDATE或DELETE語句的RETURNING子句的返回值為PL/SQL變量或主變量賦值。
<LI>定義(define):使用SELECT或FETCH語句為PL/SQL變量或主變量賦值。
</LI></OL>
<P>DML語句可以一次性傳遞集合中所有的元素,這個過程就是批量綁定。如果集合有20個元素,批量綁定的一次操作就相當于執行20次SELECT、
INSERT、UPDATE或DELETE語句。這項技術是靠減少PL/SQL和SQL引擎間的切換次數來提高性能的。要對INSERT、UPDATE和
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -