CREATE INDEX¶
기존 하이브리드 테이블 에 새로운 보조 인덱스를 만들고 인덱스를 데이터로 채웁니다.
인덱스 생성은 온라인(비차단) 작업입니다. 인덱스가 작성되는 동안 하이브리드 테이블은 SELECT 및 DML 문에 계속 사용할 수 있습니다. 그러나 하이브리드 테이블을 적극적으로 사용하지 않고 다운타임이 문제가 되지 않는 경우에는 인덱스가 정의된 하이브리드 테이블을 다시 생성하는 것이 좋습니다. 하이브리드 테이블 만들기 도 참조하십시오.
- 참고 항목:
DROP INDEX , SHOW INDEXES , CREATE HYBRID TABLE , DROP TABLE , DESCRIBE TABLE , SHOW HYBRID TABLES
구문¶
CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
ON <table_name>
( <col_name> [ , <col_name> , ... ] )
매개 변수¶
index_name
새 인덱스의 식별자를 지정합니다. 특정 하이브리드 테이블의 새 인덱스 각각에 대해 고유한 이름을 지정해야 합니다. 이름이 동일하거나 동일하게 정렬된 열 세트가 있는 다른 보조 인덱스가 하이브리드 테이블에 존재할 수 없습니다.
table_name
새 인덱스를 보유할 기존 하이브리드 테이블의 이름을 지정합니다.
col_name
하이브리드 테이블에서 기존 열 이름을 지정합니다. 테이블 생성 시 정의된 인덱스 열에 대한 모든 요구 사항이 열 식별자에 적용됩니다.
하이브리드 테이블에는 동일하게 정렬된 열 세트에 정의된 보조 인덱스가 두 개 포함될 수 없습니다.
지리 공간 데이터 타입 (GEOGRAPHY 및 GEOMETRY), 반정형 데이터 타입 (ARRAY, OBJECT, VARIANT) 및 벡터 데이터 타입 (VECTOR)이 있는 열은 보조 인덱스에서 지원되지 않습니다.
액세스 제어 요구 사항¶
인덱스를 생성하려면 하이브리드 테이블에 대한 OWNERSHIP 권한이 있는 역할을 사용해야 합니다.
사용법 노트¶
CREATE INDEX 명령은 외래, 기본 또는 고유 키 제약 조건을 추가하는 데 사용할 수 없습니다.
새 인덱스를 생성해도 다른 워크로드가 동시에 차단되지는 않습니다. 하이브리드 테이블은 동시 SELECT 및 DML 문에 사용할 수 있습니다.
언제든지 하이브리드 테이블당 하나의 활성 인덱스 빌드 작업만 실행할 수 있습니다.
SHOW INDEXES 를 사용하여 인덱스 작성 진행 상황을 추적할 수 있습니다. STATUS 열은 다음 값을 가질 수 있습니다.
ACTIVE
: 인덱스가 완성되어 데이터를 검색하는 데 사용할 수 있습니다.SUSPENDED
: 인덱스는 업데이트만 되며, 데이터 검색에는 사용되지 않습니다.BUILD FAILURE
: 인덱스 작성 과정에서 오류가 발생했습니다. 인덱스를 삭제하고 다시 생성해야 합니다.BUILD IN PROGRESS
: 인덱스가 작성 중이며 데이터 검색에 사용되지 않습니다.
DROP INDEX 및 CREATE INDEX를 사용하여 상태가
SUSPENDED
,BUILD FAILURE
또는BUILD IN PROGRESS
인 비활성 인덱스를 다시 작성할 수 있습니다.작성 중인 인덱스의 일부인 열을 삭제하려면 먼저 인덱스를 삭제하여 인덱스 작성을 중지한 다음 열을 삭제합니다. 인덱스를 삭제하기 전에 열을 삭제하려고 하면 다음 오류 메시지가 표시됩니다.
Column '<col_name>' cannot be dropped because it is used by index '<index-name>'.
CREATE INDEX 문이 실행된 시점에 동일한 테이블에서 DML이 포함된 모든 활성 트랜잭션이 완료될 때까지 온라인 인덱스 작성이 진행되지 않습니다. 해당 트랜잭션 중 하나라도 5분 이상 유휴 상태로 유지되면 기본적으로 트랜잭션이 중단됩니다. 트랜잭션 섹션을 참조하십시오.
인덱스 작성 과정 중에 모든 DML은 새 인덱스에 대한 쓰기 작업을 수행하지만 인덱스를 사용하여 데이터를 검색하지는 않습니다.
CREATE INDEX 명령이 완료된 후 실행을 시작한 소수의 동시 DML이 실패하고 다음 오류를 반환할 수 있습니다.
DML was unaware of concurrent DDL. Please retry this query.
중단된 DML 문이 다중 문 트랜잭션에 속하는 경우 해당 트랜잭션은 TRANSACTION_ABORT_ON_ERROR 매개 변수가 TRUE로 설정된 경우에만 롤백됩니다.
새로 생성된 인덱스는 인덱스 작성 과정이 성공적으로 마무리되고 인덱스 상태가
ACTIVE
인 경우에만 데이터 검색에 사용됩니다.
예¶
다음 CREATE INDEX 예제를 실행하려면 먼저 하이브리드 테이블을 만들고 로드합니다.
CREATE OR REPLACE HYBRID TABLE mytable (
pk INT PRIMARY KEY,
val INT,
val2 INT
);
INSERT INTO mytable SELECT seq, seq+100, seq+200
FROM (SELECT seq8() seq FROM TABLE(GENERATOR(rowcount => 100)) v);
이제 테이블에 인덱스를 만들 수 있습니다.
CREATE OR REPLACE INDEX vidx ON mytable (val);
+----------------------------------+
| status |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
인덱스 작성 중에 오류가 발생하면 SHOW INDEXES 명령은 다음 상태를 보고합니다.
BUILD FAILURE Index build failed. Please drop the index and re-create it.
인덱스 작성을 중지하기로 결정한 경우에는 DROP INDEX 명령을 사용하십시오.
DROP INDEX mytable.vidx;
+-------------------------------------+
| status |
|-------------------------------------|
| Statement executed successfully. |
+-------------------------------------+