學習一下這個有意思的東西。
繫結變數能夠有效的降低硬解析。這裡需要查詢幾個檢視:v$mystat,v$statname,v$sqlarea。
先查一下現在系統存在的解析數:
select name, valuefrom 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,應該就是上面那個查詢造成的。
寫乙個儲存過程:
createorreplace
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:
insertinto 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歲的漢族人口有多少,那 民族 這列必然要被放在...