# 테이블 인덱스

## Content

## 목적

테이블 인덱스는 레코드 조회 작업의 속도를 향상시키는 필드 기반 구조입니다.
인덱스가 없으면 테이블은 검색을 수행할 때 모든 레코드를 검사해야 합니다. 대규모 데이터 집합에서는 이로 인해 성능에 영향을 받을 수 있습니다. 특정 필드에 인덱스를 생성하면 테이블은 일치하는 레코드를 더욱 효율적으로 찾을 수 있습니다.
인덱스는 특히 다음과 같은 경우에 유용합니다.

* 특정 필드가 자주 검색되는 경우
* 테이블에 많은 수의 레코드가 포함된 경우
* 테이블 시트와 같은 대화형 컴포넌트에서 빠른 조회가 필요한 경우

인덱스는 조회 성능을 향상시키지만 추가적인 유지 관리 비용이 발생합니다. 삽입, 수정 및 삭제 작업 시 인덱싱된 필드를 함께 갱신해야 하므로 약간의 오버헤드가 발생할 수 있습니다.
자주 조회되는 필드에 대해서만 선택적으로 인덱스를 사용하는 것이 좋습니다.

## 단일 열 인덱스

데이터 매니저는 <span class="font-semibold" data-streamdown="strong" style="border: 0px solid; box-sizing: inherit; margin: 0px; padding: 0px; --tw-font-weight: 600; font-weight: 600; -webkit-font-smoothing: antialiased; font-family: ui-sans-serif, -apple-system, system-ui, Segoe UI, Helvetica, Apple Color Emoji, Arial, sans-serif, Segoe UI Emoji, Segoe UI Symbol; line-height: 1.7; color: rgb(248, 250, 252);">단일 열 인덱스</span>를 지원합니다.
다음과 같이 호출하면:

```javascript
table.createIndexes(["CompanyName", "City"]);
```

테이블은 다음 필드에 대해 **독립적인 인덱스**를 생성합니다.

* `CompanyName`
* `City`

각 필드는 개별적으로 인덱싱됩니다.

## 인덱스 생성

인덱스는 명시적으로 생성해야 합니다.

```javascript
table.createIndexes(["CompanyName", "City"]);
```

인덱스는 자동으로 생성되지 않습니다.
필드에 인덱스가 없으면 검색 작업은 선형 탐색 방식으로 수행됩니다.

## 인덱스 유지

인덱스는 다음 이후에도 유지됩니다.

* `fetch()`
* 테이블 데이터 다시 로드

인덱스는 다음과 같은 경우에만 제거됩니다.

```javascript
table.dropIndexes(["City"]);
```

또는

```javascript
table.clearIndexes();
```

이를 통해 한 번 인덱스를 정의한 후 데이터가 다시 로드되더라도 계속 재사용할 수 있습니다.

## 인덱스 관리

### 특정 인덱스 제거

```javascript
table.dropIndexes(["City"]);
```

지정된 필드의 인덱스를 제거합니다.

### 모든 인덱스 제거

```javascript
table.clearIndexes();
```

모든 인덱싱된 필드를 제거합니다.

### 인덱싱된 필드 확인

```javascript
table.getIndexes();
```

현재 인덱싱된 필드 이름의 배열을 반환합니다.
인덱스가 없는 경우:

```javascript
[]
```