

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 인덱스 관리


**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

이 섹션에서는 Amazon QLDB에서 인덱스를 생성, 설명 및 삭제하는 방법을 설명합니다. 생성할 수 있는 테이블당 인덱스 수에 대한 할당량은 [Amazon QLDB 할당량 및 제한](limits.md#limits.fixed)에 정의되어 있습니다.

**Topics**
+ [

## 인덱스 생성
](#working.manage-indexes.create)
+ [

## 인덱스 설명
](#working.manage-indexes.describe)
+ [

## 인덱스 삭제
](#working.manage-indexes.drop)
+ [

## 일반적인 오류
](#working.manage-indexes.errors)

## 인덱스 생성


[테이블 및 인덱스 생성](working.create.md#working.create.tables-indexes)에도 설명된 대로 [CREATE INDEX](ql-reference.create-index.md) 문을 사용하여 다음과 같이 지정된 최상위 필드의 인덱스를 테이블에 생성할 수 있습니다. 테이블 이름과 인덱싱된 필드 이름은 모두 대소문자를 구분합니다.

```
CREATE INDEX ON VehicleRegistration (VIN)
```

```
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
```

테이블에 생성하는 각 인덱스에는 시스템에서 할당한 고유 ID가 있습니다. 이 인덱스 ID를 찾으려면 다음 [인덱스 설명](#working.manage-indexes.describe) 섹션을 참조하세요.

**중요**  
QLDB는 문서를 효율적으로 조회하기 위한 인덱스가 필요합니다. 인덱스가 없으면 QLDB는 문서를 읽을 때 전체 테이블 스캔을 수행해야 합니다. 이로 인해 동시성 충돌 및 트랜잭션 시간 초과를 포함하여 대규모 테이블에서 성능 문제가 발생할 수 있습니다.  
인덱싱된 필드 또는 문서 ID(예: `=` 또는 `IN`)에서 동등 *연산자*를 사용하여 `WHERE` 조건자 절이 포함된 문을 실행하는 것이 좋습니다. 자세한 내용은 [쿼리 성능 최적화](working.optimize.md)을 참조하세요.

인덱스를 생성할 때는 다음 제약 조건에 유의하세요.
+ 인덱스는 단일 최상위 필드에만 생성할 수 있습니다. 복합, 중첩, 고유 및 함수 기반 인덱스는 지원되지 않습니다.
+ `list` 및 `struct`를 비롯한 모든 [Ion 데이터 유형](ql-reference.data-types.md)에 대해 인덱스를 생성할 수 있습니다. 그러나 Ion 유형에 관계없이 전체 Ion 값이 같아야만 인덱스 조회를 수행할 수 있습니다. 예를 들어 `list` 형식을 인덱스로 사용하는 경우 목록 내에서 한 항목씩 인덱스 검색을 수행할 수 없습니다.
+ 동등 조건자(예: `WHERE indexedField = 123` 또는 `WHERE indexedField IN (456, 789)`)를 사용할 때만 쿼리 성능이 향상됩니다.

  QLDB는 쿼리 조건자의 부등을 인정하지 않습니다. 따라서 범위 필터링된 스캔은 구현되지 않습니다.
+ 인덱싱된 필드 이름은 대소문자를 구분하며 최대 128자입니다.
+ QLDB에서의 인덱스 생성은 비동기적으로 이루어집니다. 비어 있지 않은 테이블에서 인덱스 빌드를 완료하는 데 걸리는 시간은 테이블 크기에 따라 다릅니다. 자세한 내용은 [인덱스 관리](#working.manage-indexes)을 참조하세요.

## 인덱스 설명


QLDB에서의 인덱스 생성은 비동기적으로 이루어집니다. 비어 있지 않은 테이블에서 인덱스 빌드를 완료하는 데 걸리는 시간은 테이블 크기에 따라 다릅니다. 인덱스 빌드 상태를 확인하려면 시스템 카탈로그 테이블 [information\$1schema.user\$1tables](working.catalog.md)을 쿼리하면 됩니다.

예를 들어, 다음 명령문은 시스템 카탈로그에서 `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` - 복구할 수 없는 오류로 인해 인덱스를 빌드할 수 없습니다. 이 상태의 인덱스는 여전히 테이블당 인덱스 할당량에 포함됩니다. 자세한 내용은 [일반적인 오류](#working.manage-indexes.errors)을 참조하세요.
  + `DELETING` - 사용자가 인덱스를 삭제한 후 인덱스를 적극적으로 삭제하고 있습니다.
+ `message` - 인덱스에 `FAILED` 상태가 있는 이유를 설명하는 오류 메시지입니다. 이 필드는 실패한 인덱스에만 포함됩니다.

### 콘솔 사용


 AWS Management Console 를 사용하여 인덱스의 상태를 확인할 수도 있습니다.

**인덱스의 상태를 확인하려면(콘솔)**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb) Amazon QLDB 콘솔을 엽니다.

1. 탐색 창에서 **원장**을 선택합니다.

1. **원장** 목록에서 관리하려는 인덱스가 있는 원장 이름을 선택합니다.

1. 원장 세부정보 페이지의 **테이블** 탭에서 인덱스를 확인할 테이블 이름을 선택합니다.

1. 테이블 세부정보 페이지에서 **인덱싱된 필드** 카드를 찾습니다. **인덱스 상태** 열은 테이블의 각 인덱스의 현재 상태를 표시합니다.

## 인덱스 삭제


[DROP INDEX](ql-reference.drop-index.md) 명령문을 사용하여 인덱스를 삭제합니다. 인덱스를 삭제하면 테이블에서 영구적으로 삭제됩니다.

먼저 인덱스 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 를 사용하여 인덱스를 삭제할 수도 있습니다.

**인덱스를 삭제하려면(콘솔)**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb) Amazon QLDB 콘솔을 엽니다.

1. 탐색 창에서 **원장**을 선택합니다.

1. **원장** 목록에서 관리하려는 인덱스가 있는 원장 이름을 선택합니다.

1. 원장 세부정보 페이지의 **테이블** 탭에서 인덱스를 삭제할 테이블 이름을 선택합니다.

1. 테이블 세부정보 페이지에서 **인덱싱된 필드** 카드를 찾습니다. 삭제하려는 인덱스를 선택한 다음 **인덱스 삭제**를 선택합니다.

## 일반적인 오류


이 섹션에서는 인덱스를 만들 때 발생할 수 있는 일반적인 오류를 설명하고 가능한 해결 방법을 제안합니다.

**참고**  
`FAILED` 상태의 인덱스는 여전히 테이블당 인덱스 할당량에 포함됩니다. 또한 실패한 인덱스는 테이블에서 인덱스 생성 실패를 초래한 문서를 수정하거나 삭제하는 것을 방지합니다.  
할당량에서 인덱스를 제거하려면 명시적으로 인덱스를 [제거](#working.manage-indexes.drop)해야 합니다.

**문서에 인덱싱된 필드 *fieldName*에 대한 여러 값이 포함되어 있습니다.**  
테이블에 동일한 필드에 대해 여러 값(즉, 중복된 필드 이름)이 있는 문서가 포함되어 있기 때문에 QLDB는 지정된 필드 이름에 대한 인덱스를 생성할 수 없습니다.  
먼저 실패한 인덱스를 삭제해야 합니다. 그런 다음 인덱스 생성을 다시 시도하기 전에 테이블의 모든 문서에 각 필드 이름에 대해 하나의 값만 있는지 확인하세요. 중복이 없는 다른 필드에 대한 인덱스를 생성할 수도 있습니다.  
또한 테이블에 이미 인덱싱된 필드에 대해 여러 값이 포함된 문서를 삽입하려고 할 경우 QLDB는 이 오류를 반환합니다.

**인덱스 제한 초과: 테이블 *TableName에는* 이미 *n개*의 인덱스가 있으며 더 만들 수 없습니다.**  
QLDB는 실패한 인덱스를 포함하여 테이블당 인덱스를 5개로 제한합니다. 새 인덱스를 생성하기 전에 기존 인덱스를 삭제해야 합니다.

**식별자가 *indexId*인 정의된 인덱스가 없습니다.**  
지정된 테이블과 인덱스 ID 조합에 대해 존재하지 않는 인덱스를 삭제하려고 했습니다. 기존 인덱스를 확인하는 방법을 알아보려면 [인덱스 설명](#working.manage-indexes.describe)을 참조하세요.