[20170503]]函数COALESCE优于NVL 2.txt

简介: [20170503]]函数COALESCE优于NVL 2.txt http://blog.itpub.net/267265/viewspace-2137853/ --//上面的链接提示COALESCE具有短路的功能,能很快获得结果,我上次测试采用自定义函数,演示这个功能,实际上的应用不会是变量,可能 --//是常数.

[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没有空值.

目录
相关文章
join()与split()函数的区别
join()与split()函数的区别
153 0
join()与split()函数的区别
|
Oracle 关系型数据库 MySQL
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
490 0
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
[20170114]12c varchar2类型直方图.txt
[20170114]12c varchar2类型直方图.txt --我曾经提到慎用nvarchar2数据类型,链接:http://blog.itpub.net/267265/viewspace-2120925/ --我那里提到数据类型nvarchar2类型,因为1...
871 0
|
Oracle 关系型数据库 MySQL
对比mysql学习oracle函数(五):oracle单行函数—nvl、nvl2、nullif、coalesce、case、decode函数
对比mysql学习oracle函数(五):oracle单行函数—nvl、nvl2、nullif、coalesce、case、decode函数
对比mysql学习oracle函数(五):oracle单行函数—nvl、nvl2、nullif、coalesce、case、decode函数
|
算法 索引 关系型数据库
[20170601]distinct的优化.txt
[20170601]distinct的优化.txt 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING          VERSION    BANNER -------------------- ---------- ...
1087 0
[20170525]分析函数first_value.txt
[20170525]分析函数first_value.txt --//昨天看sql语句,发现居然分析函数first_value.我一直认为开发如果要做一些报表需要了解学习一些oracle分析函数的知识,我发现许 --//多开发这方面一篇空白.
817 0
|
SQL Oracle 关系型数据库
[20170516]nvl与非NULL约束.txt
[20170516]nvl与非NULL约束.txt --前几天做的测试http://blog.itpub.net/267265/viewspace-2137853/,实际上差异没有这个大,因为第2个多数是常量.
866 0
|
关系型数据库 Oracle Linux
[20170516]nvl与非NULL约束2.txt
[20170516]nvl与非NULL约束2.txt --//接着上午的测试看看COALESCE看看过滤的情况. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION      ...
944 0
[20170424]函数COALESCE优于NVL.txt
[20170424]函数COALESCE优于NVL.txt --//以前如果某个字段为NULL,在一些运算要给它赋值,比如0,实际上开发(包括自己更喜欢使用nvl),实际上COALESCE更加优于nvl, --//参考链接做一个例子: http://nimishgarg.
1073 0