예전에 POWER 함수의 CPU 연산에 대한 글을 썼었다. 몇가지 해법을 제시했지만 실효성이 크지 않았다. 값의 정확도를 포기한다면 부동 소수점 수(floating point number) 타입 사용으로 쉽게 성능을 개선할 수 있다.
테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 AS SELECT 3 AS c1 FROM XMLTABLE ('1 to 1000000');
아래 쿼리는 NUMBER 타입을 사용했다. NUMBER 타입은 고정 소수점 수(fixed-point number) 타입이다.
-- 2-1 SELECT COUNT (POWER (c1, 2.0)) FROM t1; 경 과: 00:00:00.20 -- 2-2 SELECT COUNT (POWER (c1, 0.1)) FROM t1; 경 과: 00:00:26.21
아래 쿼리는 BINARY_DOUBLE 타입을 사용했다. 수행 시간이 단축된 것을 확인할 수 있다.
-- 3-1 SELECT COUNT (POWER (c1, 0.1D)) FROM t1; 경 과: 00:00:00.65 -- 3-2 SELECT COUNT (POWER (c1, CAST (0.1 AS BINARY_DOUBLE))) FROM t1; 경 과: 00:00:00.74
'Oracle > Tuning' 카테고리의 다른 글
스칼라 서브 쿼리의 버퍼 Pinning 효과 (0) | 2019.12.24 |
---|---|
SELECT 문과 DML 문의 쿼리 변환 차이 (0) | 2019.11.29 |
WINDOW SORT로 인한 성능 저하 (0) | 2019.11.22 |
INDEX MIN/MAX 오퍼레이션이 동작하지 않는 사례 (0) | 2019.10.29 |
OUTER OR JOIN 조건 #2 (0) | 2019.10.28 |