繫結變數對效能的影響

2021-04-17 17:29:57 字數 1371 閱讀 6496

使用繫結變數對效能的影響,《oracle 程式設計入門經典》( beginning oracle programming )中的例子:

sql> alter system flush shared_pool;

sql> set serveroutput on

declare

l_start number;

l_cnt number;

begin

l_start := dbms_utility.get_time;

for i in 1..100

loop

execute immediate

'select count(*) from dual

where dummy='''||to_char(i)||''''

into l_cnt;

end loop;

dbms_output.put_line('no binds'||(dbms_utility.get_time - l_start)||'hsecs');

l_start := dbms_utility.get_time;

for i in 1..100

loop

execute immediate

'select count(*) from dual

where dummy=:x'

into l_cnt

using to_char(i);

end loop;

dbms_output.put_line('binding'||(dbms_utility.get_time - l_start)||'hsecs');

end;

什麼是繫結變數? 

查詢通常只是因為改變where子句中的內容而產生不同的結果。為了在這種情況下避免硬解析,我們需要使用繫結變數(bind variable)。它是使用者放入查詢中的佔位符,它會告訴oracle"我會隨後為這個變數提供乙個值,現在需要生成乙個方案,但我實際執行語句的時候,我會為您提**該使用的實際值"。

select * from emp where ename='king'; //不使用繫結變數

select * from emp where ename=:bv     //使用繫結變數

使用繫結變數的好處:

1. 如果oracle能在共享池中找到使用者要執行的sql語句,那麼會省略解析、確定優化方案等過程;

2. 使用者在使用共享池的時候,會鎖定它,如果使用繫結變數,那麼會大大減少鎖定的時間;

為了使效能更好,以下方面需要注意:

1. 在所有可能的地方使用完全相同的查詢文字;

2. 盡量將sql語句隱藏在儲存過程或者函式中;

3. 在應用程式的程式設計中,也要盡量使用函式、過程等可以呼叫的結構中去;

synchronized 對效能的影響

public static void main string args throws exception runnable run2 new runnable runnable run3 new runnable runnable run4 new runnable newthread run1 s...

Log擴張對效能的影響

新建乙個資料庫,將資料檔案變為1000mb 以保證在實驗中資料檔案不會變化 日誌檔案大小設定為1mb,每次增長200k.不斷的向資料庫中插入資料,觀察分配頁和日誌增長的關係。log growths代表日誌檔案的增長,可以看出,每次日誌增長,page allocated都會停滯 正在進行的新頁分配的事...

SCSI軟體層對效能的影響

在快閃儲存器儲存領域,我們可以看到無論在市場 客戶還是在研發,大家都在支援 nvme 標準,其很重要的乙個原因是傳統的 scsi 已經不能滿足效能需求,其變成了儲存系統的乙個重要效能瓶頸點。從軟體層 傳輸協議效率 軟體介面標準 晶元介面 傳輸鏈路,傳統的 sas sata 都存在很多不足的地方。今天...