I have been using NVL. However, I think that we should all move to use COALESCE.
This testing describes the reason:
In case of two values, they are synonyms.
However, they are implemented differently.
This runs for almost
COALESCE is much efficient than NVL!
COALESCE
is more modern function that is a part of ANSI-92
standard.NVL
is Oracle
specific, it was introduced in 80
's before there were any standards.This testing describes the reason:
In case of two values, they are synonyms.
However, they are implemented differently.
NVL
always evaluates both arguments, while COALESCE
stops evaluation whenever it finds first non-NULL
:SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
This runs for almost
0.5
seconds, since it generates SYS_GUID()
's, despite 1
being not a NULL
.SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
This understands that 1
is not a NULL
and does not evaluate the second argument.SYS_GUID
's are not generated and the query is instant.COALESCE is much efficient than NVL!
No comments:
Post a Comment