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>
( <col_name>
[ , <col_name> ] ) ON <table_name>
매개 변수¶
index_name
새 인덱스의 식별자를 지정합니다. 이름은 인덱스가 생성되는 하이브리드 테이블에 대해 고유해야 합니다. 이름이 동일하거나 순서가 동일한 열 세트에 있는 다른 보조 인덱스는 하이브리드 테이블에 존재할 수 없습니다.
table_name
새 인덱스를 보유할 기존 하이브리드 테이블의 이름을 지정합니다.
col_name
하이브리드 테이블의 기존 열 이름을 지정합니다. 테이블 생성 시 정의된 인덱스 열에 대한 모든 요구 사항이 열 식별자에 적용됩니다.
사용법 노트¶
CREATE INDEX 명령은 외래, 기본 또는 고유 키 제약 조건을 추가하는 데 사용할 수 없습니다.
인덱스를 생성하려면 하이브리드 테이블에 대한 OWNERSHIP 권한이 있는 역할을 사용해야 합니다.
특정 하이브리드 테이블의 새 인덱스 각각에 대해 고유한 이름을 선택해야 합니다.
새 인덱스에 대한 열을 선택하는 경우 하이브리드 테이블에는 동일한 순서의 열 세트에 대해 정의된 두 개의 보조 인덱스가 포함될 수 없습니다.
일부 열 유형(예: VARIANT)은 보조 인덱스에서 허용되지 않습니다.
새 인덱스를 생성해도 다른 워크로드가 동시에 차단되지는 않습니다. 하이브리드 테이블은 동시 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 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 (val) ON mytable;
이 명령은 BUILD IN PROGRESS The index is being built and will register concurrent DML changes to the base table. The index will not be used until it has finished building.
메시지를 반환합니다.
인덱스 작성이 진행되는 동안 오류가 발생하면 SHOW INDEXES 명령이 BUILD FAILURE Index build failed. Please drop the index and re-create it.
메시지를 표시하며 작업이 실패했음을 나타냅니다.
인덱스 작성을 중지하기로 결정한 경우에는 DROP INDEX 명령을 사용할 수 있습니다.
DROP INDEX vid ON mytable;
+-------------------------------------+
| status |
|-------------------------------------|
| Statement executed successfully. |
+-------------------------------------+