Asynchronous Global Index Maintenance
·
Oracle/Administration
개요 Oracle 12c에 Asynchronous Global Index Maintenance 기능이 추가되었습니다. 이 기능은 글로벌 인덱스의 관리 작업을 비동기로 수행함으로써 글로벌 인덱스를 가진 테이블에 대한 DROP PARTITION과 TRUNCATE PARTITION의 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) PARTITION BY RANGE (c1) ( PARTITION p1 VALUES LESS THAN (5000001) , PARTITION p2 VALUES LESS THAN (MAXVALUE) ) AS SELECT ROWNUM, 'X' FROM XMLTABLE ('1 ..
KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수
·
Oracle/SQL
Oracle 21c에 KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 모양을 나타내는 kurtosis 값을 반환합니다. KURTOSIS_POP 함수는 population(모집단) kurtosis 값, KURTOSIS_SAMPLE 함수는 sample(표본) kurtosis 값을 반환한다는 차이점이 있습니다. KURTOSIS_POP ([ DISTINCT | ALL | UNIQUE ] expr) KURTOSIS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3, c4, c10, c11 칼럼은 1, 2의 분포가 큰 반면, C5 ~ C7 칼럼은 1, 2의 분포가 비슷합니..
SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수
·
Oracle/SQL
Oracle 21c에 SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 대칭성을 나타내는 skewness 값을 반환합니다. SKEWNESS_POP 함수는 population(모집단) skewness 값, SKEWNESS_SAMPLE 함수는 sample(표본) skewness 값을 반환한다는 차이점이 있습니다. SKEWNESS_POP ([ DISTINCT | ALL | UNIQUE ] expr) SKEWNESS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3 ~ c6 칼럼은 분포가 좌측에 집중된 positive skew, c8 ~ c11 칼럼은 분포가 우측에 집중..
컬렉션 할당 기능 개선
·
Oracle/PLSQL
개요 Oracle 21c부터 Iterator Choice로 컬렉션에 값을 할당할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1)); INSERT INTO t1 VALUES (2, 'A'); INSERT INTO t1 VALUES (4, 'B'); INSERT INTO t1 VALUES (6, 'C'); COMMIT; Basic Iterator Choice Basic Iterator Choice는 컬렉션에 값을 할당할 수 없습니다. 아래 예제는 에러가 발생합니다. -- 2 DECLARE TYPE taa IS TABLE OF VARCHAR2(1) INDEX BY PLS..
Qualified Expression 기능 개선
·
Oracle/PLSQL
개요 Oracle 21c에서 Qualified Expression 기능이 대폭 개선되었습니다. PL/SQL Language Reference는 Qualified Expression를 아래와 같이 구분합니다. qualified_expression empty_qualified_expression simple_qualified_expression aggregate_qualified_expression positional_choice_list expr sequence_iterator_choice explicit_choice_list named_choice_list indexed_choice_list basic_iterator_choice index_iterator_choice others_choice 이 글은 ..
FOR LOOP 문 기능 개선
·
Oracle/PLSQL
개요 Oracle 21c에서 FOR LOOP 문의 기능이 대폭 개선되었습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1)); INSERT INTO t1 VALUES (2, 'A'); INSERT INTO t1 VALUES (4, 'B'); INSERT INTO t1 VALUES (6, 'C'); COMMIT; Iterand FOR LOOP 문의 iterand에 MUTABLE 키워드와 constrained type을 사용할 수 있습니다. pls_identifier [ MUTABLE | IMMUTABLE ] [constrained_type] 아래 예제는 iterand에 MUTA..
비트 연산
·
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..
Bitmap-based COUNT (DISTINCT) Functions
·
Oracle/SQL
개요 Oracle 19c에 추가된 BITMAP_BUCKET_NUMBER, BITMAP_BIT_POSITION, BITMAP_CONSTRUCT_AGG, BITMAP_OR_AGG, BITMAP_COUNT 함수를 사용하면 숫자 값에 대해 비트맵 기반의 COUNT (DISTINCT) 집계를 수행할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER); INSERT INTO t1 VALUES (1, 3, 1); INSERT INTO t1 VALUES (1, 3, 2); INSERT INTO t1 VALUES (1, 4, 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..
ANY_VALUE 함수
·
Oracle/Performance
Oracle 19c에 ANY_VALUE 함수가 추가되었습니다. ANY_VALUE 함수는 집계 함수로 그룹에서 널이 아닌 첫 번째 값을 반환합니다. 이 함수는 첫 번째 값을 찾은 후 집계를 수행하지 않아 결과가 비결정적이고, MIN, MAX 함수보다 속도가 빠른 것으로 알려져 있습니다. ANY_VALUE ([ DISTINCT | ALL ] expr) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 1000000), CEIL (ROWNUM / 1000000) FROM XMLTABLE ('1 to 10000000'); 아래 쿼리는 수행에 0.65초가 소요됩니다. -- 2 ..