1.创建一个测试表test,并插入一条数据 SQL> create table test(id int); Table created. SQL> insert into test values(1); 1 row created. SQL> commit; Commit complete. 2.创建一个函数,用来延时,调到到这个函数会在这里循环50000000次,会有待等 SQL> create or replace function sleep_now return number is 2 a number; 3 begin 4 a:=0; 5 while a<50000000 6 loop 7 a :=a+1; 8 end loop; 9 return a; 10 end; 11 / Function created. 3.打开sqlplus的计时器 SQL> set timing on 4.用nvl()函数测试表test中的id列的值是否为空 SQL> select nvl(id,sleep_now()) from test; NVL(ID,SLEEP_NOW()) ------------------- 1 Elapsed: 00:00:03.25 查表test中就一条数据花了3秒多才读完,说明什么问题呢,思考一下? 好,那我直接给个固定的值:比如10,放到nvl中执行,看是不是马上就会执行完毕? SQL> select nvl(10,sleep_now()) from test; NVL(10,SLEEP_NOW()) ------------------- 10 Elapsed: 00:00:03.33 还是一样查一条数据要花3秒多,说明用nvl()函数,即使这个值非空,这个函数还是会去读后面的sleep_now()函数,这样就会消耗时间了。 5.用decode()来测试同样的一条数据,看查询的时间 SQL> select decode(id,null,sleep_now(),1) from test; DECODE(ID,NULL,SLEEP_NOW(),1) ----------------------------- 1 Elapsed: 00:00:00.01 马上查出,几乎没花时间,很快哦! 同样再测一下固定值:比如10 SQL> select decode(id,10,sleep_now(),1) from test; DECODE(ID,10,SLEEP_NOW(),1) --------------------------- 1 Elapsed: 00:00:00.01 同样也是马上查出 这么快查出,说明一当decode()函数查到值就不会去读后面的sleep_now()函数。 6.从第4步与第5步比较,同样的操作,明显 decode函数性能更佳。 7.最后再来个decode的例子,如何用好decode() truncate table test; begin for i in 1 ..10000 loop insert into test values(4); commit; end loop; end; / SQL> select id,count(*) from test group by id; ID COUNT(*) ---------- ---------- 4 10000 表test中有10000条记录, id值全是4,思考下面A、B两个sql语句,相对来说哪个性能更好一些? A select decode(id,1,'A',2,'B',3,'C',4,'D') from test; B select decode(id,4,'D',2,'B',3,'C',1,'A') from test; 知道的解释下!!! **********本博客所有内容均为原创,如有转载请注明作者和出处!!!********** QQ: 252803295 Email: oracledba_cn@hotmail.com Blog: http://blog.csdn.net/guoyJoe ITPUB: http://www.itpub.net/space-uid-28460966.html OCM: http://education.oracle.com/education/otn/YGuo.HTM 答案在:http://blog.csdn.net/guoyjoe/article/details/8624392 Oracle@Paradise 总群:127149411 Oracle@Paradise No.1群:177089463(已满) Oracle@Paradise No.2群:121341761 Oracle@Paradise No.3群:140856036 |
nvl() 与decode()两个函数哪个性能更佳?
原创
©著作权归作者所有:来自51CTO博客作者guoyJoe的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:分区表添加分区的问题
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
decode and nvl and sign
值1,值2
user oracle null windows sql -
HashTable与Dictionary哪个性能更好?
这个问题
多线程 线程安全 单线程 -
【109期】面试官问:说说 MyBatis 和 Hibernate JPA,哪个性能更佳?
前言由于编程思想与数据库的设计模式不同,生...
数据库 mysql java 编程语言 hibernate