기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
인덱스 관리
중요
지원 종료 알림: 기존 고객은 2025년 7월 31일 지원이 종료될 QLDB 때까지 Amazon을 사용할 수 있습니다. 자세한 내용은 아마존 QLDB 원장을 Amazon Aurora SQL Postgre로 마이그레이션을
이 단원에서는 QLDB Amazon에서 인덱스를 생성, 설명 및 삭제하는 방법을 설명합니다. 생성할 수 있는 테이블당 인덱스 수에 대한 할당량은 아마존의 할당량 및 한도 QLDB에 정의되어 있습니다.
인덱스 생성
에도 설명된 테이블 및 인덱스 생성 대로 다음과 같이 CREATEINDEX명령문을 사용하여 테이블에 지정된 최상위 필드의 인덱스를 생성할 수 있습니다. 테이블 이름과 인덱싱된 필드 이름은 모두 대소문자를 구분합니다.
CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
테이블에 생성하는 각 인덱스에는 시스템에서 할당한 고유 ID가 있습니다. 이 인덱스 ID를 찾으려면 다음 인덱스 설명 섹션을 참조하세요.
중요
QLDB문서를 효율적으로 검색하려면 색인이 필요합니다. 색인이 없으면 문서를 읽을 때 전체 테이블을 QLDB 스캔해야 합니다. 이로 인해 동시성 충돌 및 트랜잭션 시간 초과를 포함하여 대규모 테이블에서 성능 문제가 발생할 수 있습니다.
인덱싱된 필드 또는 문서 ID(예: =
또는 IN
)에서 동등 연산자를 사용하여 WHERE
조건자 절이 포함된 문을 실행하는 것이 좋습니다. 자세한 내용은 쿼리 성능 최적화을 참조하세요.
인덱스를 생성할 때는 다음 제약 조건에 유의하세요.
-
인덱스는 단일 최상위 필드에만 생성할 수 있습니다. 복합, 중첩, 고유 및 함수 기반 인덱스는 지원되지 않습니다.
-
list
및struct
를 비롯한 모든 Ion 데이터 유형에 대해 인덱스를 생성할 수 있습니다. 그러나 Ion 유형에 관계없이 전체 Ion 값이 같아야만 인덱스 조회를 수행할 수 있습니다. 예를 들어list
형식을 인덱스로 사용하는 경우 목록 내에서 한 항목씩 인덱스 검색을 수행할 수 없습니다. -
동등 조건자(예:
WHERE indexedField = 123
또는WHERE indexedField IN (456, 789)
)를 사용할 때만 쿼리 성능이 향상됩니다.QLDB쿼리 조건의 불평등을 고려하지 않습니다. 따라서 범위 필터링된 스캔은 구현되지 않습니다.
-
인덱싱된 필드 이름은 대소문자를 구분하며 최대 128자입니다.
-
의 인덱스 QLDB 생성은 비동기적으로 이루어집니다. 비어 있지 않은 테이블에서 인덱스 빌드를 완료하는 데 걸리는 시간은 테이블 크기에 따라 다릅니다. 자세한 내용은 인덱스 관리을 참조하세요.
인덱스 설명
의 QLDB 인덱스 생성은 비동기적으로 이루어집니다. 비어 있지 않은 테이블에서 인덱스 빌드를 완료하는 데 걸리는 시간은 테이블 크기에 따라 다릅니다. 인덱스 빌드 상태를 확인하려면 시스템 카탈로그 테이블 information_schema.user_tables을 쿼리하면 됩니다.
예를 들어, 다음 명령문은 시스템 카탈로그에서 VehicleRegistration
테이블의 모든 인덱스를 쿼리합니다.
SELECT VALUE indexes FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration'
{ indexId: "Djg2nt0yIs2GY0T29Kud1z", expr: "[VIN]", status: "ONLINE" }, { indexId: "4tPW3fUhaVhDinRgKRLhGU", expr: "[LicensePlateNumber]", status: "FAILED", message: "aws.ledger.errors.InvalidEntityError: Document contains multiple values for indexed field: LicensePlateNumber" }
인덱스 필드
-
indexId
- 인덱스의 고유 ID입니다. -
expr
- 인덱싱된 문서 경로입니다. 이 필드는[fieldName]
형식의 문자열입니다. -
status
- 인덱스의 현재 상태입니다. 인덱스의 상태는 다음 값 중 하나일 수 있습니다.-
BUILDING
- 테이블의 인덱스를 적극적으로 빌드하고 있습니다. -
FINALIZING
- 인덱스 빌드를 완료하고 활성화하여 사용하기 시작합니다. -
ONLINE
- 활성 상태이며 쿼리에 사용할 준비가 되었습니다. QLDB상태가 온라인 상태가 될 때까지는 쿼리에 색인을 사용하지 않습니다. -
FAILED
- 복구할 수 없는 오류로 인해 인덱스를 빌드할 수 없습니다. 이 상태의 인덱스는 여전히 테이블당 인덱스 할당량에 포함됩니다. 자세한 내용은 일반적인 오류을 참조하세요. -
DELETING
- 사용자가 인덱스를 삭제한 후 인덱스를 적극적으로 삭제하고 있습니다.
-
-
message
- 인덱스에FAILED
상태가 있는 이유를 설명하는 오류 메시지입니다. 이 필드는 실패한 인덱스에만 포함됩니다.
를 사용하여 색인 상태를 확인할 수도 있습니다. AWS Management Console
인덱스의 상태를 확인하려면(콘솔)
에 AWS Management Console로그인하고 https://console.aws.amazon.com/qldb
에서 아마존 QLDB 콘솔을 엽니다. -
탐색 창에서 원장을 선택합니다.
-
원장 목록에서 관리하려는 인덱스가 있는 원장 이름을 선택합니다.
-
원장 세부정보 페이지의 테이블 탭에서 인덱스를 확인할 테이블 이름을 선택합니다.
-
테이블 세부정보 페이지에서 인덱싱된 필드 카드를 찾습니다. 인덱스 상태 열은 테이블의 각 인덱스의 현재 상태를 표시합니다.
인덱스 삭제
DROP INDEX 명령문을 사용하여 인덱스를 삭제합니다. 인덱스를 삭제하면 테이블에서 영구적으로 삭제됩니다.
먼저 인덱스 ID를 information_schema.user_tables
에서 찾으세요. 예를 들어, 다음 쿼리는 VehicleRegistration
테이블에서 인덱싱된 LicensePlateNumber
필드의 indexId
을 반환합니다.
SELECT indexes.indexId FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration' and indexes.expr = '[LicensePlateNumber]'
그런 다음 이 ID를 사용하여 인덱스를 삭제하세요. 다음은 인덱스 ID 4tPW3fUhaVhDinRgKRLhGU
를 삭제하는 예제입니다. 인덱스 ID는 큰따옴표로 묶어야 하는 고유 식별자입니다.
DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
참고
이 WITH (purge = true)
절은 모든 DROP
INDEX
명령문에 필수이며 true
는 현재 지원되는 유일한 값입니다.
purge
키워드는 대소문자를 구분하며 모두 소문자여야 합니다.
를 사용하여 AWS Management Console 색인을 삭제할 수도 있습니다.
인덱스를 삭제하려면(콘솔)
에 AWS Management Console로그인하고 https://console.aws.amazon.com/qldb
에서 아마존 QLDB 콘솔을 엽니다. -
탐색 창에서 원장을 선택합니다.
-
원장 목록에서 관리하려는 인덱스가 있는 원장 이름을 선택합니다.
-
원장 세부정보 페이지의 테이블 탭에서 인덱스를 삭제할 테이블 이름을 선택합니다.
-
테이블 세부정보 페이지에서 인덱싱된 필드 카드를 찾습니다. 삭제하려는 인덱스를 선택한 다음 인덱스 삭제를 선택합니다.
일반적인 오류
이 섹션에서는 인덱스를 만들 때 발생할 수 있는 일반적인 오류를 설명하고 가능한 해결 방법을 제안합니다.
참고
FAILED
상태의 인덱스는 여전히 테이블당 인덱스 할당량에 포함됩니다. 또한 실패한 인덱스는 테이블에서 인덱스 생성 실패를 초래한 문서를 수정하거나 삭제하는 것을 방지합니다.
할당량에서 인덱스를 제거하려면 명시적으로 인덱스를 제거해야 합니다.
- 문서에 인덱싱된 필드 값이 여러 개 포함되어 있습니다.
fieldName
. -
QLDB테이블에 동일한 필드에 대해 여러 값이 있는 문서 (즉, 중복된 필드 이름) 가 포함되어 있기 때문에 지정된 필드 이름에 대한 색인을 만들 수 없습니다.
먼저 실패한 인덱스를 삭제해야 합니다. 그런 다음 인덱스 생성을 다시 시도하기 전에 테이블의 모든 문서에 각 필드 이름에 대해 하나의 값만 있는지 확인하세요. 중복이 없는 다른 필드에 대한 인덱스를 생성할 수도 있습니다.
QLDB테이블에 이미 색인된 필드의 값이 여러 개 포함된 문서를 삽입하려고 하는 경우에도 이 오류가 반환됩니다.
- 인덱스 한도 초과: 표
tableName
이미n
색인이 있어 더 만들 수 없습니다. -
QLDB실패한 인덱스를 포함하여 테이블당 인덱스 5개를 제한합니다. 새 인덱스를 생성하기 전에 기존 인덱스를 삭제해야 합니다.
- 식별자가 있는 정의된 인덱스 없음:
indexId
. -
지정된 테이블과 인덱스 ID 조합에 대해 존재하지 않는 인덱스를 삭제하려고 했습니다. 기존 인덱스를 확인하는 방법을 알아보려면 인덱스 설명을 참조하세요.