[20170503]]函式COALESCE優於NVL 2.txt
[20170503]]函式COALESCE優於NVL 2.txt
http://blog.itpub.net/267265/viewspace-2137853/
--//上面的連結提示COALESCE具有短路的功能,能很快獲得結果,我上次測試採用自定義函式,演示這個功能,實際上的應用不會是變數,可能
--//是常數.做一個測試.
1.環境:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------- -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table t as select rownum id from dual connect by level<=2e4;
Table created.
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
commit;
--//分析表略.表大小128M.
SCOTT@book> select count(*) from t;
COUNT(*)
----------
10240000
2.測試:
SCOTT@book> set timing on
SCOTT@book> select count(*) from t where COALESCE(id,0)=0;
COUNT(*)
----------
0
Elapsed: 00:00:00.60
SCOTT@book> select count(*) from t where nvl(id,0)=0;
COUNT(*)
----------
0
Elapsed: 00:00:00.66
--//差別不是很明顯,可以講差別不大.加入簡單運算看看.
SCOTT@book> select count(*) from t where COALESCE(id,0+id)=0;
COUNT(*)
----------
0
Elapsed: 00:00:00.60
SCOTT@book> select count(*) from t where nvl(id,0+id)=0;
COUNT(*)
----------
0
Elapsed: 00:00:00.90
--//從這裡也可以看出COALESCE短路判斷的優勢.雖然不是很明顯.加入一點複雜運算看看.
SCOTT@book> select count(*) from t where COALESCE(id,sqrt(id))=0;
COUNT(*)
----------
0
Elapsed: 00:00:00.60
SCOTT@book> select count(*) from t where nvl(id,sqrt(id))=0;
COUNT(*)
----------
0
Elapsed: 00:00:04.32
--//從這裡看出差異,而且可以看出nvl先運算了sqrt(id).而採用COALESCE無論何種運算,執行實際基本不變.當然我表中的資料id沒有空值.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2138315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20170424]函式COALESCE優於NVL.txt函式
- [Developer] NVL,NVL2,NULLIF,COALESCE,DECADE,CASEDeveloperNull
- COALESCE函式的用法。函式
- Oracle-nvl和nvl2函式Oracle函式
- 【函式】oracle nvl2 函式函式Oracle
- 【Oracle的NVL函式用法】Oracle函式
- nvl、nvl2與nullif函式用法區別Null函式
- Oracle中coalesce函式的簡單理解Oracle函式
- SQL Server COALESCE()函式的2種好用方法SQLServer函式
- SQL Server COALESCE()函式的創新應用SQLServer函式
- Oracle中處理空值的函式nvl-nvl2-lnnvl-nullif的用法Oracle函式Null
- 新學一個函式nvl2(a,b,c)函式
- [20170516]nvl與非NULL約束2.txtNull
- [20190402]關於semtimedop函式呼叫2.txt函式
- Oracle-空值null和數字相加的問題-nvl函式OracleNull函式
- nvl, nvl2, nullifNull
- Oracle關於nvl的一個BugOracle
- sql優化用group by 函式代替分析函式SQL優化函式
- 關於雲函式冷啟動優化的思考函式優化
- Excel 優化函式Excel優化函式
- SQL優化--函式索引SQL優化函式索引
- React函式式元件的效能優化React函式元件優化
- 20180601]函式與標量子查詢2.txt函式
- MySQL函式索引及優化MySql函式索引優化
- 關於函式指標函式指標
- 基於函式的索引函式索引
- 關於建構函式與解構函式的分享函式
- [JS效能優化]函式去抖(debounce)與函式節流(throttle)JS優化函式
- 如何使用函式來優化效能函式優化
- 關於count函式的理解函式
- 關於path_alloc()函式函式
- Oracle基於函式的索引Oracle函式索引
- 關於inline函式inline函式
- 關於lag函式的用法函式
- 【機器學習】【base】 之 目標函式 損失函式 優化演算法機器學習函式優化演算法
- Oracle索引合併coalesce操作Oracle索引
- 合併分割槽(coalesce partition)
- 學習bind原始碼,比較bind的方式繫結函式在在記憶體使用上優於箭頭函式原始碼函式記憶體