1. 用途
強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用(2核以上的比較明顯),使用parallel說明,就會多核同時工作,來提高效率。
但本身啟動這個功能,也是要消耗資源與效能的。所有,一般都會在返回記錄數大於100萬時使用,效果也會比較明顯。
2. 語法
/*+parallel(table_short_name,cash_number)*/
這個可以加到insert、delete、update、select的後面來使用(和rule的用法差不多,有機會再分享rule的用法)
開啟parallel功能的語句是:
alter session enable parallel dml;
這個語句是dml語句哦,如果在程式中用,用execute的方法開啟。
3. 例項說明
用erp中的transaction來說明下吧。這個table記錄了所有的transaction,而且每天資料量也算相對比較大的(根據企業自身業務量而定)。假設我們現在要檢視對比去年一年當中每月的進、銷情況,所以,一般都會寫成:
select to_char(transaction_date,'yyyymm') txn_month,
sum(
decode(
sign(transaction_quantity),1,transaction_quantity,0
)) in_qty,
sum(
decode(
sign(transaction_quantity),-1,transaction_quantity,0
)) out_qty
from mtl_material_transactions mmt
where transaction_date >= add_months(
to_date(
to_char(sysdate,'yyyy')||'0101','yyyymmdd'),
-12)
and transaction_date <= add_months(
to_date(
to_char(sysdate,'yyyy')||'1231','yyyymmdd'),
-12)
group by to_char(transaction_date,'yyyymm')
這個sql執行起來,如果transaction_date上面有加index的話,效率還算過的去;但如果沒有加index的話,估計就會半個小時內都執行不出來。這是就可以在select 後面加上parallel說明。例如:
select /*+parallel(mmt,10)*/
to_char(transaction_date,'yyyymm') txn_month,
...這樣的話,會大大提高執行效率。如果要將檢索出來的結果insert到另乙個表tmp_count_tab的話,也可以寫成:
insert /*+parallel(t,10)*/
into tmp_count_tab
(txn_month,
in_qty,
out_qty
)select /*+parallel(mmt,10)*/
to_char(transaction_date,'yyyymm') txn_month,
...插入的機制和檢索機制差不多,所以,在insert後面加parallel也會加速的。關於insert機制,這裡暫不說了。
parallel後面的數字,越大,執行效率越高。不過,貌似跟server的配置還有oracle的配置有關,增大到一定值,效果就不明顯了。所以,一般用8,10,12,16的比較常見。我試過用30,發現和16的效果一樣。不過,數值越大,占用的資源也會相對增大的。如果是在一些package、function or procedure中寫的話,還是不要寫那麼大,免得占用太多資源被dba開k。
4. parallel也可以用於多表
多表的話,就是在第一後面,加入其他的就可以了。具體寫法如下:
/*+parallel(t,10) (b,10)*/
5. 小結
關於執行效率,建議還是多按照index的方法來提高效果。oracle有自帶的explan road的方法,在執行之前,先看下執行計畫路線,對寫好的sql tuned之後再執行。實在沒辦法了,再用parallel方法。parallel比較**,對開發者而言,不是好東西,會養成不好習慣,導致很多bad sql不會暴漏,sql tuning的能力得不到提公升。我有見過某些人create table後,從不create index或primary key,認為寫sql時加parallel就可以了。
Oracle並行模式(Parallel)
1.例項 1 insert 加速 2.用途 強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用 2核以上...
Oracle並行模式(Parallel)
1.例項 1 insert 加速 2.用途 強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用 2核以上...
Oracle 並行查詢
並行查詢允許將乙個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後會將各個部分的結果組合起來,提供最終的答案。我們來看乙個例子 1.執行如下一串sql語句,建立乙個叫big table的表,期間會讓你錄入1的值 想要往big table表裡面插入多少行資料 我錄入的是10...