使用繫結變數對效能的影響,《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 都存在很多不足的地方。今天...