CREATE INDEX
CREATE INDEX는 새 인덱스를 정의합니다. Aurora DSQL에서 인덱스 생성은 항상 비동기식이므로 ASYNC 키워드를 지정해야 합니다. Aurora DSQL이 비동기 인덱스 빌드를 실행하는 방법과 이를 모니터링하는 방법에 대한 자세한 내용은 Aurora DSQL의 비동기 인덱스 섹션을 참조하세요.
지원되는 구문
CREATE [ UNIQUE ] INDEX ASYNC [ [ IF NOT EXISTS ] name ] ON table_name ( { column_name | ( expression ) } [ NULLS { FIRST | LAST } ] [, ...] ) [ INCLUDE ( column_name [, ...] ) ] [ NULLS [ NOT ] DISTINCT ]
설명
CREATE INDEX는 지정된 테이블의 지정된 열에 인덱스를 구성합니다. 인덱스는 주로 데이터베이스 성능을 향상시키는 데 사용되지만, 부적절하게 사용하면 성능이 느려질 수 있습니다.
인덱스의 키 필드를 열 이름으로 지정하거나 괄호 안의 표현식으로 지정합니다. 여러 필드를 지정하여 다중 열 인덱스를 생성할 수 있습니다.
인덱스 필드는 테이블 행의 하나 이상의 열 값에서 계산된 표현식일 수 있습니다. 이 기능을 사용하면 기본 데이터의 일부 변환을 기반으로 데이터에 빠르게 액세스할 수 있습니다. 예를 들어 upper(col)를 기반으로 계산된 인덱스는 WHERE upper(col) = 'JIM' 절이 인덱스를 사용하도록 허용합니다.
인덱스 정의에 사용되는 모든 함수 및 연산자는 변경할 수 없어야 합니다. 즉, 결과는 해당 인수에만 의존해야 하며 다른 테이블의 내용 또는 현재 시간과 같은 외부 영향에는 절대 의존하지 않아야 합니다. 이 제한은 인덱스의 동작이 잘 정의되도록 합니다. 인덱스 표현식에서 사용자 정의 함수를 사용하려면 함수를 생성할 때 IMMUTABLE로 표시해야 합니다.
파라미터
UNIQUE-
시스템이 인덱스를 생성할 때, 데이터가 이미 존재하는 경우, 그리고 사용자가 데이터를 추가할 때마다 테이블에 중복 값이 있는지 확인하도록 합니다. 중복 항목이 발생할 수 있는 데이터를 삽입하거나 업데이트하려고 하면 오류가 발생합니다.
IF NOT EXISTS-
동일한 이름의 관계가 이미 있는 경우 오류를 발생시키지 않습니다. 이 경우 알림이 발행됩니다. 기존 인덱스가 새로 생성되었을 인덱스와 유사할 것이라는 보장은 없습니다.
IF NOT EXISTS를 지정할 때 인덱스 이름이 필요합니다. INCLUDE-
선택적
INCLUDE절은 인덱스에 키가 아닌 열로 포함할 열 목록을 지정합니다. 인덱스 스캔 검색 조건에는 키가 아닌 열을 사용할 수 없으며, Aurora DSQL은 인덱스가 적용하는 고유성 또는 제외 제약 조건과 관련하여 해당 열을 무시합니다. 그러나 인덱스 전용 스캔은 인덱스 항목에서 직접 사용할 수 있으므로 인덱스의 테이블을 방문할 필요 없이 키가 아닌 열의 콘텐츠를 반환할 수 있습니다. 따라서 키가 아닌 열을 추가하면 그렇지 않았다면 인덱스 전용 스캔을 사용할 수 없었을 쿼리에서도 이를 사용할 수 있습니다.표현식은 인덱스 전용 스캔에 사용할 수 없으므로 포함된 열로 지원되지 않습니다.
이름-
생성할 인덱스의 이름입니다. 여기에 스키마 이름을 포함할 수 없습니다. Aurora DSQL은 항상 상위 테이블과 동일한 스키마에 인덱스를 생성합니다. 인덱스의 이름은 해당 스키마에 있는 테이블, 시퀀스, 인덱스, 뷰와 같은 다른 관계의 이름과 달라야 합니다. 이름을 생략하면 Aurora DSQL은 상위 테이블의 이름과 인덱싱된 열 이름을 기반으로 적절한 이름을 선택합니다.
table_name-
인덱싱할 테이블의 이름(선택적으로 스키마 한정)입니다.
column_name-
테이블의 열 이름입니다.
expression-
테이블의 하나 이상의 열을 기반으로 한 표현식입니다. 일반적으로 구문과 같이 표현식을 괄호로 묶어 작성해야 합니다. 그러나 표현식에 함수 직접 호출 양식이 있는 경우 괄호를 생략할 수 있습니다.
NULLS FIRST-
null이 아닌 값보다 null이 먼저 정렬되도록 지정합니다.
NULLS LAST-
null이 아닌 값보다 null이 나중에 정렬되도록 지정합니다.
NULLS DISTINCTNULLS NOT DISTINCT-
고유 인덱스에서 null 값을 고유한 값, 즉 서로 다른 값으로 간주하는지 여부를 지정합니다. 기본값은 null 값을 고유한 값으로 간주하는 것입니다. 따라서 고유 인덱스가 열에 여러 null 값을 포함할 수 있습니다.
예제
테이블 films의 열 title에 고유 인덱스를 생성합니다.
CREATE UNIQUE INDEX ASYNC title_idx ON films (title);
테이블 films의 포함된 열 director 및 rating을 사용하여 열 title에 고유 인덱스를 생성합니다.
CREATE UNIQUE INDEX ASYNC title_idx ON films (title) INCLUDE (director, rating);
표현식 lower(title)를 기반 인덱스를 생성합니다. 그러면 대/소문자를 구분하지 않는 효율적인 검색이 가능합니다.
CREATE INDEX ASYNC ON films ((lower(title)));
이 예제에서는 인덱스 이름을 생략하므로 Aurora DSQL은 일반적으로 films_lower_idx인 이름을 선택합니다.
기본값이 아닌 null 정렬 순서를 사용하는 인덱스를 생성합니다.
CREATE INDEX ASYNC title_idx_nulls_low ON films (title NULLS FIRST);