熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

教你輕松掌握Oracle9i裡指針共享的增強

2013-11-13 15:57:06  來源: Oracle 

  在Oraclei裡有一個內部新特性它允許SQL基於代價的優化器(costbased optimizerCBO)改變執行計劃即使正在使用優化器計劃的穩定性叫做窺視(peeking)當綁定變量導致SQL的執行計劃發生重大改變的時候它允許SQL的CBO更該執行計劃

  但是指針共享在優化的時候有一個處理延遲只有當應用程序生成動態SQL的時候或者它在必須嵌入文字值的應用程序裡的時候它才應該被使用由於綁定變量的緣故PL/SQL應用程序不會從指針共享裡獲益

  為了說明這一問題你可以考慮以下這樣一個例子我們的CURSOR_SHARING參數被設置為FORCE這會把所有的SQL文字值都改為庫緩沖區裡的主變量(host variable)

  現在讓我們假設我們有了一個對客戶(customer)表格的區域(region)列的索引區域列有四個值東(east)南(south)西(west)北(north)區域列的數據值高度不對稱%的值都在南部地區

  所以在指定南部的時候讓SQL的CBO來執行完整的表格掃描而在指定東西北的時候使用索引范圍掃描這樣速度會更快在使用指針共享的時候SQL的CBO會把SQL裡的任何文字值都改為綁定變量所以這個陳述式可以改成下面這樣

  

  select     customer_stuff   from     customer   where     region = west;      這個轉換會把文字west替換成主變量      select     customer_stuff   from     customer   where     region = :var;

  在Oraclei裡SQL的CBO會在第一次調用指針的時候窺視由用戶定義的綁定變量的值這就能夠讓優化器確定WHERE子句操作符的選擇性並在south值每次出現在SQL的時候更改執行計劃

  當綁定變量用於高度不對稱的數據列時這就極大地提高了指針共享的性能在Oraclei裡我們看到了一個用於CURSOR_SHARING的新設置叫做SIMILAR

  有了CURSOR_SHARING=SIMILAROracle會切換到綁定變量如果這樣做不會導致結果產生任何變化的話但是如果使用綁定變量會造成結果的巨大變化它就會使用文字值


From:http://tw.wingwit.com/Article/program/Oracle/201311/17567.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.