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

目录
相关文章
rank()、dense-rank()、row-number()的区别
rank()、dense-rank()、row-number()的区别
101 0
|
SQL
SQL中rank(),dense_rank(),row_number()的异同
rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。
186 0
SQL中rank(),dense_rank(),row_number()的异同
join()与split()函数的区别
join()与split()函数的区别
166 0
join()与split()函数的区别
|
Oracle 关系型数据库 MySQL
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
511 0
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
|
关系型数据库 MySQL
MySQL - 排序函数 Rank() Over()、Dense_rank() Over()、Row_number() Over()
MySQL - 排序函数 Rank() Over()、Dense_rank() Over()、Row_number() Over()
388 0
MySQL - 排序函数 Rank() Over()、Dense_rank() Over()、Row_number() Over()
|
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函数
|
SQL
SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE
原文:SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE SQL 2005新增加相关函数 : ROW_NUMBER,RANK,DENSE_RANK、NTILE 窗口函数 ...
1286 0
|
算法 索引 关系型数据库
[20170601]distinct的优化.txt
[20170601]distinct的优化.txt 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING          VERSION    BANNER -------------------- ---------- ...
1090 0
|
关系型数据库 Oracle Linux
[20170516]nvl与非NULL约束2.txt
[20170516]nvl与非NULL约束2.txt --//接着上午的测试看看COALESCE看看过滤的情况. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION      ...
950 0
|
SQL Oracle 关系型数据库
[20170516]nvl与非NULL约束.txt
[20170516]nvl与非NULL约束.txt --前几天做的测试http://blog.itpub.net/267265/viewspace-2137853/,实际上差异没有这个大,因为第2个多数是常量.
869 0