[ 결론 ]
: 단순 비교 결과 어느 것이 성능이 좋다는 유의미한 결과 전혀 없으며, 각 Function과 Expression 에 따른 특성 이해를
바탕으로 업무 SQL에서 어느 것을 선택하여 잘 사용하는 것이 핵심
1. 테스트
: " TB_TEST " 테이블의 특정 컬럼 데이터 5백 만 건 중 4,163,638건을 'KTH' 로 변환하여 성능 비교.
각 수행 되는 SQL은 모두 DISK I/O 없도록 처리함.
2. 결과
: NVL, COALESCE, NVL2, DECODE, CASE 순으로 빠르게 출력되나 의미 있는 수치 아님
[1] NVL : Active Time :2023/08/22 16:43:45 / Execution : 1 / CPU Elapsed : 2.88 / Elapsed : 2.88 / Buffer : 284353 / DISK RATIO : 0
[2] NVL2 : Active Time :2023/08/22 16:43:48 / Execution : 1 / CPU Elapsed : 2.949 / Elapsed : 2.949 / Buffer : 284353 / DISK RATIO : 0
[3] DECODE : Active Time :2023/08/22 16:43:50 / Execution : 1 / CPU Elapsed : 2.9979 / Elapsed : 2.9979 / Buffer : 284353 / DISK RATIO : 0
[4] COALESCE : Active Time :2023/08/22 16:43:53 / Execution : 1 / CPU Elapsed : 2.8752 / Elapsed : 2.8752 / Buffer : 284353 / DISK RATIO : 0
[5] CASE : Active Time :2023/08/22 16:43:56 / Execution : 1 / CPU Elapsed : 3.0111 / Elapsed : 3.0111 / Buffer : 284353 / DISK RATIO : 0
3. TEST 쿼리
SELECT NVL( CODE, 'KTH' ), COUNT(*)
FROM TB_TEST
WHERE ROWNUM <= 5000000
GROUP BY NVL( CODE, 'KTH' )
SELECT NVL2( CODE, CODE, 'KTH' ), COUNT(*)
FROM TB_TEST
WHERE ROWNUM <= 5000000
GROUP BY NVL2( CODE, CODE, 'KTH' )
SELECT DECODE( CODE, NULL , 'KTH' ,CODE) , COUNT(*)
FROM TB_TEST
WHERE ROWNUM <= 5000000
GROUP BY DECODE( CODE, NULL , 'KTH' ,CODE)
SELECT COALESCE ( CODE, 'KTH' ) , COUNT(*)
FROM TB_TEST
WHERE ROWNUM <= 5000000
GROUP BY COALESCE ( CODE, 'KTH' )
SELECT CASE WHEN CODE IS NULL THEN 'KTH' ELSE CODE END, COUNT(*)
FROM TB_TEST
WHERE ROWNUM <= 5000000
GROUP BY CASE WHEN CODE IS NULL THEN 'KTH' ELSE CODE END
'ORACLE > SQL' 카테고리의 다른 글
DBMS_RANDOM.STRING 사용법 (0) | 2024.06.15 |
---|