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> , ... ] )
Copy

매개 변수

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);
Copy

이제 테이블에 인덱스를 만들 수 있습니다.

CREATE OR REPLACE INDEX vidx ON mytable (val);
Copy
+----------------------------------+
| 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;
Copy
+-------------------------------------+
| status                              |
|-------------------------------------|
| Statement executed successfully.    |
+-------------------------------------+