Oracle/Tuning2019. 11. 23. 18:02

예전에 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


Posted by 정희락_