乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Oracle 綁定變量

       guolijiegg 2012-01-18

      Oracle 綁定變量

      分類(lèi): Oracle 基礎(chǔ)知識(shí) 1148人閱讀 評(píng)論(1) 收藏 舉報(bào)

      oracle 中,對(duì)于一個(gè)提交的sql語(yǔ)句,存在兩種可選的解析過(guò)程一種叫做硬解析,一種叫做軟解析.


      一個(gè)硬解析需要經(jīng)解析,制定執(zhí)行路徑,優(yōu)化訪問(wèn)計(jì)劃等許多的步驟.硬解釋不僅僅耗費(fèi)大量的cpu,更重要的是會(huì)占據(jù)重要的們閂(latch)資源,嚴(yán)重的影響系統(tǒng)的規(guī)模的擴(kuò)大(即限制了系統(tǒng)的并發(fā)行), 而且引起的問(wèn)題不能通過(guò)增加內(nèi)存條和cpu的數(shù)量來(lái)解決。

      之所以這樣是因?yàn)殚T(mén)閂是為了順序訪問(wèn)以及修改一些內(nèi)存區(qū)域而設(shè)置的,這些內(nèi)存區(qū)域是不能被同時(shí)修改。當(dāng)一個(gè)sql語(yǔ)句提交后,oracle會(huì)首先檢查一下共享緩沖池(shared pool)里有沒(méi)有與之完全相同的語(yǔ)句,如果有的話只須執(zhí)行軟分析即可,否則就得進(jìn)行硬分析。
      而唯一使得oracle 能夠重復(fù)利用執(zhí)行計(jì)劃的方法就是采用綁定變量。綁定變量的實(shí)質(zhì)就是用于替代sql語(yǔ)句中的常量的替代變量。綁定變量能夠使得每次提交的sql語(yǔ)句都完全一樣。

      綁定變量只是起到占位的作用,同名的綁定變量并不意味著在它們是同樣的,在傳遞時(shí)要考慮的是傳遞的值與綁定變量出現(xiàn)順序的對(duì)位,而不是綁定變量的名稱(chēng)。

      綁定變量是在通常情況下能提升效率,非正常的情況如下:

      在字段(包括字段集)建有索引,且字段()的集的勢(shì)非常大(也就是有個(gè)值在字段中出現(xiàn)的比例特別的大)的情況下,使用綁定變量可能會(huì)導(dǎo)致查詢計(jì)劃錯(cuò)誤,因而會(huì)使查詢效率非常低。這種情況最好不要使用綁定變量。

      但是并不是任何情況下都需要使用綁定變量,下面是兩種例外情況:
      1.對(duì)于隔相當(dāng)一段時(shí)間才執(zhí)行一次的SQL語(yǔ)句,這是利用綁定變量的好處會(huì)被不能有效利用優(yōu)化器而抵消
      2.?dāng)?shù)據(jù)倉(cāng)庫(kù)的情況下。

      綁定變量不能當(dāng)作嵌入的字符串來(lái)使用,只能當(dāng)作語(yǔ)句中的變量來(lái)用。不能用綁定變量來(lái)代替表名、過(guò)程名、字段名等.

      從效率來(lái)看,由于oracle10G放棄了RBO,全面引入CBO,因此,在10G中使用綁定變量效率的提升比9i中更為明顯。

      舉例:


      普通sql語(yǔ)句:

      SELECT fname, lname, pcode FROM cust WHERE id = 674;
      SELECT fname, lname, pcode FROM cust WHERE id = 234;
      SELECT fname, lname, pcode FROM cust WHERE id = 332;
      含綁定變量的sql 語(yǔ)句:
      SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;

      Sql*plus 中使用綁定變量:


      SQL> set timing on

      SQL> variable x number;

      SQL> exec :x :=8

      PL/SQL 過(guò)程已成功完成。

      已用時(shí)間:  00: 00: 00.03

      SQL> select * from A;

              ID

      ----------

               3

               5

      已用時(shí)間:  00: 00: 00.06

      SQL> insert into A values(:x);

      已創(chuàng)建 行。

      已用時(shí)間:  00: 00: 00.01

      SQL> select * from A;

              ID

      ----------

               3

               8

               5

      已用時(shí)間:  00: 00: 00.01


      PL/SQL很多時(shí)候都會(huì)自動(dòng)綁定變量而無(wú)需編程人員操心,即很多你寫(xiě)得sql語(yǔ)句都會(huì)自動(dòng)利用綁定變量,如下例所示: 
      SQL> Set timing on

      SQL> declare

        2  I NUMBER;

        3  BEGIN

        4  FOR I IN 1..1000 LOOP

        5  INSERT INTO A VALUES(I);

        6  end loop;

        7  end;

        8  /

      PL/SQL 過(guò)程已成功完成。

      已用時(shí)間:  00: 00: 00.12

      這段代碼是不需要使用綁定變量的方法來(lái)提高效率的,ORACLE會(huì)自動(dòng)將其中的變量綁定。

      SQL> create table D ( id varchar(10));

      表已創(chuàng)建。

      已用時(shí)間:  00: 00: 00.50

      SQL> declare

        2  i number;

        3  sqlstr varchar(2000);

        4  begin

        5  for i in 1..1000 loop

        6  sqlstr :=' insert into d values('||to_char(i)||')';

        7  execute immediate sqlstr;

        8  end loop;

        9  end;

       10  /

      PL/SQL 過(guò)程已成功完成。

      已用時(shí)間:  00: 00: 00.68

      這段代碼同樣是執(zhí)行了1000insert語(yǔ)句,但是每一條語(yǔ)句都是不同的,因此ORACLE會(huì)把每條語(yǔ)句硬解析一次,其效率就比前面那段就低得多了。如果要提高效率,不妨使用綁定變量將循環(huán)中的語(yǔ)句改為

      SQL> declare

        2  i number;

        3  sqlstr varchar(2000);

        4  begin

        5  for i in 1..1000 loop

        6  sqlstr :=' insert into d values(:i)';

        7  execute immediate sqlstr using i;

        8  end loop;

        9  end;

       10  /

      PL/SQL 過(guò)程已成功完成。

      已用時(shí)間:  00: 00: 00.18

      這樣執(zhí)行的效率就高得多了。

      PL/SQL中,引用變量即是引用綁定變量。但是在pl/sql中動(dòng)態(tài)sql并不是這樣。


      vb,java以及其他應(yīng)用程序中都得顯式地利用綁定變量。
      對(duì)于綁定變量的支持不僅僅限于oracle,其他RDBMSSQL SERVER也支持這一特性。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多