비트 연산
·
Oracle/SQL
개요 Oracle 21c에 비트 값을 집계 연산할 수 있는 BIT_AND_AGG, BIT_OR_AGG, BIT_XOR_AGG 함수가 추가되었습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER); 기본 함수 비트 값과 관련하여 기본적으로 BIN_TO_NUM, BITAND 함수를 사용할 수 있습니다. BIN_TO_NUM 함수는 비트 벡터에 해당하는 숫자 값을 반환합니다. BITAND 함수는 두 숫자 값의 비트 AND 결과를 숫자 값으로 반환합니다. 아래와 같이 BIN_TO_NUM 함수를 사용하여 데이터를 삽입하겠습니다. -- 2 INSERT INTO t1 VALUES..
분석 함수 기능 개선
·
Oracle/SQL
Oracle 21c에서 분석 함수 기능이 개선되었습니다. 이번 글에서 관련 내용을 살펴보겠습니다. 준비테스트 버전은 아래와 같습니다.-- 1SELECT version_full FROM product_component_version;VERSION_FULL------------21.3.0.0.01 row selected. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 2DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);INSERT INTO t1 VALUES (1, 1);INSERT INTO t1 VALUES (2, 1);INSERT INTO t1 VALUES (3, 2);INSERT INTO t1 VALUES (4, 2);INSERT INTO ..
SET 연산자 기능 개선
·
Oracle/SQL
Oracle 21c부터 SET 연산자 뒤에 ALL 또는 DISTICT 키워드를 지정할 수 있습니다. ALL 키워드를 지정하면 중복을 제거하지 않고, DISTICT 키워드를 지정하면 중복을 제거합니다. 기본값은 DISTICT 키워드입니다. 참고로 EXCEPT 연산자는 MINUS 연산자와 동일하게 동작합니다. 결과적으로 INTERSECT ALL 연산자와 MINUS ALL 연산자가 추가되었습니다. UNION [ ALL | DISTINCT ] INTERSECT [ ALL | DISTINCT ] MINUS [ ALL | DISTINCT ] EXCEPT [ ALL | DISTINCT ] 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PUR..
CHECKSUM 함수
·
Oracle/SQL
Oracle 21c에 CHECKSUM 함수가 추가되었습니다. CHECKSUM 함수는 집계한 칼럼 값에 대한 체크섬을 반환하며, 로우 셋의 특정 칼럼에 대한 변경 여부를 확인하는 목적으로 사용할 수 있습니다. CHECKSUM ([ DISTINCT | ALL ] expr) [OVER (analytic_clause)] 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 VARCHAR2(1)); INSERT INTO t1 VALUES (1, 1, 'A'); INSERT INTO t1 VALUES (2, 1, 'B'); INSERT INTO t1 VALUES (3, 1, 'C'); INSERT..
Hash-based Distinct Aggregation
·
Oracle/Performance
Oracle 21c에 Hash-based Distinct Aggregation 기능이 추가되었습니다. 이 기능은 COUNT (DISTINCT) 표현식을 2번 이상 사용한 쿼리에 대해 해시 방식의 집계를 사용으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 1000), CEIL (ROWNUM / 1000) FROM XMLTABLE ('1 to 10000000'); 아래는 19.3 버전에서 COUNT (DISTINCT) 표현식을 2번 사용한 쿼리의 실행 계획입니다. 수행에 4.85초가 소요되고, 실행 계획 2번에 SORT GROUP BY 오퍼레이..
Hash-based Set Operation
·
Oracle/Performance
개요Oracle 21c에 Hash-based Set Operation 기능이 추가되었습니다. 이 기능은 UNION, INTERSECT, MINUS 연산을 해시 방식으로 수행함으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000');CREATE TABLE t2 (c1, c2) AS SELECT ROWNUM + 5000, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000'); UNION 연산자아래는 19.3 버전..
Hash Rollup
·
Oracle/Performance
Oracle 21c에 Hash Rollup 기능이 추가되었습니다. 이 기능은 ROLLUP에 대해 해시 방식의 집계를 사용으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 10000), LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000000'); 아래는 19.3 버전에서 ROLLUP을 사용한 쿼리의 실행 계획입니다. 수행에 2.51초가 소요되고, 실행 계획 2번에 SORT GROUP BY ROLLUP 오퍼레이션이 표시됩니다.-- 2: 19.3SELECT c1, COUNT (*) FROM t1 GROUP BY ROL..
WITH 절에 대한 FPD 쿼리 변환 (WCFPD)
·
Oracle/Performance
Oracle 21c에 WITH 절에 대한 FPD(Filter PushDown) 쿼리 변환 기능이 추가되었습니다. 이 기능은 SELECT 문에 사용한 조건을 WITH 절에 Pushdown함으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 1000000'); 아래는 19.3 버전에서 WITH 문을 사용한 쿼리의 실행 계획입니다. t1 테이블 전체를 임시 영역에 저장한 것을 확인할 수 있습니다.-- 3: 19.3WITH w1 AS (SELECT /*+ MATERIALIZE */ * FROM ..
UPDATE 문 SET 절 서브쿼리 Unnesting
·
Oracle/Performance
Oracle 21c에 UPDATE 문의 SET 절에 사용한 서브쿼리가 Unnesting되는 쿼리 변환이 추가되었습니다. 참고로 이 기능은 New Features Guide에 포함되어 있지 않습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; DROP TABLE t3 PURGE; CREATE TABLE t1 (c1, c2, c3, c4) AS SELECT ROWNUM, ROWNUM, ROWNUM, ROWNUM FROM XMLTABLE ('1 to 1000000'); CREATE TABLE t2 (c1, c2) AS SELECT c1, c2 FROM t1; CREATE TABLE t3 (c1, c2) AS SELEC..
ORA-01779 에러
·
Oracle/SQL
Oracle 21c부터 Updatable Join View에 대한 ORA-01779 에러가 사라진 것으로 보입니다. 참고로 이 에러와 관련된 BYPASS_UJVC 힌트는 11.1 버전에서 deprecate되었습니다.Starting with Oracle Database Release 21c, it is not mandatory for all updatable columns in a join view to map to columns of a key-preserved table. When updating a join view, ensure that the UPDATE operation is deterministic. Note that this does not cause any impact on update p..