使用rownum減少函式呼叫
1。建立測試表:
create table t1
( prc_chk_key number(9) not null,
prod_key number(12) not null,
cmpt_loc_key number(5) not null,
loc_key number(5) not null,
prc_chk_dt date
)
/
insert into t1 select 2, 3, 4, 5, sysdate
from all_objects where ROWNUM <= 50;
create table t2
( prc_chk_key number(9) not null,
prc_chk_typ_desc varchar2(35) not null,
cmpt_loc_key number(5),
loc_key number(5) not null
)
/
insert into t2 select 2, 'x', 4, 5
from all_objects where ROWNUM <= 50;
CREATE OR REPLACE function F
(v_prod_key IN number default NULL,
v_prc_chk_key IN number default NULL,
v_return IN varchar2 default NULL,
v_want_sr IN varchar2 default NULL,
v_version IN number ) RETURN varchar2
as
begin
dbms_application_info.set_client_info
(userenv('client_info')+1);
return 'x';
end;
/
2。執行如下sql:
exec dbms_application_info.set_client_info(0);
select /*+ use_hash( a11, a12 ) */
a12.prc_chk_typ_desc prc_chk_typ_desc,
a11.prc_chk_dt prc_chk_dt,
a11.cmpt_loc_key cmpt_loc_key,
a11.prod_key upc_prod_key,
a11.loc_key loc_key,
max(F(a11.PROD_KEY,a11.PRC_CHK_KEY, 'QTY', 'D', 1) ),
max(F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'AMT', 'D',1) ),
max(F(a11.PROD_KEY, a11.PRC_CHK_KEY,'CODE','D', 1) ),
max(F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'PRC', 'D',1) )
from t1 a11,
t2 a12
where a11.cmpt_loc_key = a12.cmpt_loc_key
and a11.loc_key = a12.loc_key
and a11.prc_chk_key = a12.prc_chk_key
group by a12.prc_chk_typ_desc, a11.prc_chk_dt,
a11.cmpt_loc_key, a11.prod_key, a11.loc_key;
set autotrace off
select userenv('client_info' ) data from dual;
結果10000,
3。如果修改如下:
exec dbms_application_info.set_client_info(0);
select /*+ USE_HASH( a11, a12 ) */
a12.prc_chk_typ_desc prc_chk_typ_desc,
a11.prc_chk_dt prc_chk_dt,
a11.cmpt_loc_key cmpt_loc_key,
a11.prod_key upc_prod_key,
a11.loc_key loc_key,
max(a),
max(b),
max(c),
max(d)
from (select a11.*,
F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'QTY', 'D', 1 ) a,
F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'AMT', 'D',1 ) b,
F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'CODE', 'D', 1 ) c,
F(a11.PROD_KEY, a11.PRC_CHK_KEY, 'PRC', 'D',1 ) d,
ROWNUM r
from t1 a11 ) a11,
T2 a12
where a11.cmpt_loc_key = a12.cmpt_loc_key
and a11.loc_key = a12.loc_key
and a11.prc_chk_key = a12.prc_chk_key
group by a12.prc_chk_typ_desc, a11.prc_chk_dt,
a11.cmpt_loc_key, a11.prod_key, a11.loc_key;
select userenv('client_info' ) data from dual;
這樣結果200,可以減少函式的呼叫。這個例子透過加入一列rownum偽列,並沒有成指數增長。包含rownum的內嵌試圖將被求值並且實體化,這樣減少了函式的呼叫。如果去掉rownum,或者加入一個1 r 這樣,並不能達到這個目的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-83002/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hive 減少日期的函式 date_sub()Hive函式
- 使用MVVM減少控制器程式碼實戰(減少56%)MVVM
- 為什麼沿著梯度的反向函式值減少的最多梯度函式
- php簡單使用shmop函式建立共享記憶體減少伺服器負載PHP函式記憶體伺服器負載
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 使用dtrace跟蹤oracle函式呼叫Oracle函式
- 子函式呼叫函式
- 函式呼叫棧函式
- 使用Excel呼叫ABAP系統的函式Excel函式
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- 使用Await減少回撥巢狀AI巢狀
- 使用String.intern減少記憶體使用記憶體
- 如何使用python super函式呼叫父類?Python函式
- 限定建構函式必須使用new呼叫函式
- 外部函式的呼叫函式
- gdb 如何呼叫函式?函式
- 函式指標呼叫函式指標
- C程式函式呼叫&系統呼叫C程式函式
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- JS中函式內套函式的呼叫JS函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- [譯] 減少 Python 中迴圈的使用Python
- 我為什麼減少使用C++ (轉)C++
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- PHP程式應該減少brk呼叫,否則效能會受影響PHP
- Java Web效能優化之一:減少DAO層的呼叫次數JavaWeb優化
- 讓你的程式碼量減少3倍!使用kotlin開發Android(二) –祕笈!擴充套件函式KotlinAndroid套件函式
- 讓你的程式碼量減少3倍!使用kotlin開發Android(二) --祕笈!擴充套件函式KotlinAndroid套件函式
- httprunner yml 呼叫外部函式HTTP函式
- Javascript的函式呼叫與thisJavaScript函式
- C中呼叫Lua函式函式
- 幾種函式呼叫方式函式
- sequence 和索引函式呼叫索引函式
- 陪玩系統原始碼利用介面非同步呼叫,減少介面耗時原始碼非同步
- 【譯】如何使用webpack減少vuejs打包的大小WebVueJS
- Go - 使用 sync.Pool 來減少 GC 壓力GoGC
- 通過減少記憶體使用改善.NET效能記憶體
- 程式中減少使用 if 語句的方法集錦