學習繫結變數

2022-02-24 07:44:22 字數 1440 閱讀 1635

學習一下這個有意思的東西。

繫結變數能夠有效的降低硬解析。這裡需要查詢幾個檢視:v$mystat,v$statname,v$sqlarea。

先查一下現在系統存在的解析數:

select name, value

from v$mystat a, v$statname b

where a.statistic# = b.statistic#

and b.name like

'parse%

';

parse time cpu

0parse time elapsed

0parse count (total)

31parse count (hard)

2parse count (failures)

0parse count (describe)

0可以看到硬解析是2,應該就是上面那個查詢造成的。

寫乙個儲存過程:

create

orreplace

procedure data_creator is

var1 number;

var2 number;

sqlstr varchar2(200);

begin

for i in

1 .. 3000 loop

var1 := seq1.nextval;

var2 := seq1.currval;

sqlstr :=

'insert into test2 values (:x, :y)

';execute immediate sqlstr

using var1, var2;

end loop;

commit;

end;

這個表會插入3000條資料,而且是由序列生成,也就是說每次執行的時候,sql是不一樣的。執行這個儲存過程:

execute data_creator;

之後查詢硬解析:

sql_text

sql_fulltext

executions  

parse_calls

sqlsql11

僅僅被執行一次,解析一次。效果明顯。

換一下,直接用insert:

insert

into test1 values (1, 2);

commit;

變換數字執行10次。

執行之前查詢解析和硬解析,分別為55和2。parse time cpu和parse time elapsed都為0.

執行之後,解析和硬解析:

99和5。parse time cpu和

parse time elapsed都為3。

看來不繫結變數的話,如果sql量很大,會對cpu造成極大的壓力。

c 學習筆記 控制項繫結變數

將乙個edit控制項繫結給乙個cstring變數後 需要在onchangetest 中加入這樣兩句話 invalidate false updatedata true updatewindow 的作用是使視窗立即重繪。呼叫invalidate等函式後視窗不會立即重繪,這是由於wm paint訊息的優...

pl sql 繫結變數

在oracle 中,對於乙個提交的sql語句,存在兩種可選的解析過程,一種叫做硬解析,一種叫做軟解析.乙個硬解析需要經解析,制定執行路徑,優化訪問計畫等許多的步驟.硬解析不僅僅耗費大量的cpu,更重要的是會佔據重要的們閂 latch 資源,嚴重的影響系統的規模的擴大 即限制了系統的並發行 而且引起的...

繫結變數窺測

事物都存在兩面性,繫結變數對大多數oltp處理是適用的,但是也有例外。比如在where條件中的字段是 傾斜字段 的時候。傾斜字段 指該列中的絕大多數的值都是相同的,比如一張人口調查表,其中 民族 這列,90 以上都是漢族。那麼如果乙個sql語句要查詢30歲的漢族人口有多少,那 民族 這列必然要被放在...