집 >데이터 베이스 >MySQL 튜토리얼 >Oracle의 NVL과 COALESCE: 언제 어느 것을 선택해야 합니까?
오라클 데이터베이스의 NVL과 COALESCE 기능의 차이점 분석
NVL 및 COALESCE 함수는 모두 null이 아닌 값을 반환하지만 둘 사이에는 미묘하지만 중요한 차이점이 있습니다.
현대화와 표준화
COALESCE는 ANSI-92 SQL 표준을 준수하는 Oracle 데이터베이스의 최신 기능입니다. 이와 대조적으로 NVL은 표준보다 앞서는 Oracle 관련 기능입니다.
두 매개변수의 동의어
NVL과 COALESCE는 두 값의 동의어처럼 동작합니다. 그러나 이 동등성은 두 개 이상의 매개변수에 대해서는 유지되지 않습니다.
평가 행동
가장 큰 차이점은 평가 행동입니다. NVL은 첫 번째 인수가 비어 있는지 여부에 관계없이 항상 두 인수를 평가합니다. 반면에 COALESCE는 일반적으로 null이 아닌 첫 번째 인수를 만나면 평가를 중지합니다. 이러한 차이는 경우에 따라 성능에 큰 영향을 미칠 수 있습니다.
다음 예는 이러한 대조를 생생하게 보여줍니다. 다음 쿼리를 고려해보세요.
<code class="language-sql">SELECT SUM(val) FROM ( SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY level < 10000 )</code>
여기서 NVL은 모든 행에 대해 1이 비어 있지 않더라도 각 행에 대해 두 개의 매개변수를 계산합니다. 이로 인해 쿼리 실행 시간이 상당히 길어집니다.
대신 COALESCE와 함께 다음 쿼리를 사용하세요.
<code class="language-sql">SELECT SUM(val) FROM ( SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY level < 10000 )</code>
은 1이 null이 아니라는 것을 인식하고 두 번째 인수 계산을 피하여 실행 시간을 크게 줄입니다.
요약하자면, NVL과 COALESCE는 두 값이 유사해 보이지만 COALESCE의 최적화된 평가 동작은 잠재적으로 null이 될 수 있는 여러 값을 처리할 때 선호되는 선택입니다.
위 내용은 Oracle의 NVL과 COALESCE: 언제 어느 것을 선택해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!