> For the complete documentation index, see [llms.txt](https://docs.tibero.com/tibero-manuals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/create-index.md).

# CREATE INDEX

인덱스를 생성합니다. 기반 테이블의 하나 이상의 컬럼에 인덱스를 생성할 수 있습니다.

**CREATE INDEX**의 세부 내용은 다음과 같습니다.

* **문법**

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2FfzJ3GIEmYckYeGXmwYqm%2Finput_create_index.png?alt=media&amp;token=0aabf9ca-145d-4b50-973c-4b5fc15bfc20" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-7469f5fded354970462fb8b39b377cf7f1f59a8d%2Fimage.png?alt=media" alt="" width="817"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-726eddc172d3a274e6005d46f57d0ec44c75bb0f%2Fimage.png?alt=media" alt="" width="492"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-d836979492f9311bb81e305759157f9bb7782299%2Fimage.png?alt=media" alt="" width="316"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-7007b8aa2a699c2f193d9464000ba3470fbe0a86%2Fimage.png?alt=media" alt="" width="408"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-a90c82fcdcd1b9b68dedf4dae6bb800c97537be7%2Fimage.png?alt=media" alt="" width="525"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-fd57962d824e564350900d27d83f317bf663a3cf%2Fimage.png?alt=media" alt="" width="733"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-1e14f324762acaff56c8cec41c51771005dc0f33%2Fimage.png?alt=media" alt="" width="726"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-ead13e23b2057f6a00efd943235a76db257c3c9d%2Fimage.png?alt=media" alt="" width="797"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-91172f49104032e38cf033133ac726017c6bb77c%2Fimage.png?alt=media" alt="" width="765"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-aba3e204c3e194debb5fd966ecb74420d5ad42c3%2Fimage.png?alt=media" alt="" width="805"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-ed127a41de1b74f5bfa801adbe165bb5d80764c0%2Fimage.png?alt=media" alt="" width="728"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-8d5cdb87f4704717e60ae892c2ca9176b5229cd5%2Fimage.png?alt=media" alt="" width="546"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://4150084347-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fevqs7Ne3nMyXQFkBSQWR%2Fuploads%2Fgit-blob-ec918d7a94a318072d4fb8171c8eac8bd412fbc8%2Fimage.png?alt=media" alt="" width="476"><figcaption></figcaption></figure></div>

* **특권**

다음 중 하나를 만족해야 CREATE INDEX 문을 실행할 수 있습니다.

* 기반 테이블이 사용자 자신의 스키마에 포함되어 있습니다.
* 기반 테이블에 대한 `INDEX` 스키마 객체 특권이 있습니다.
* `CREATE ANY INDEX` 시스템 특권이 있습니다.
* **구성요소**

\- create\_index

<table><thead><tr><th width="221">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>UNIQUE</td><td><ul><li>지정하면 유일 인덱스를 생성</li><li>유일 인덱스에는 중복된 키 값을 저장할 수 없음</li></ul></td></tr><tr><td>BITMAP</td><td>지정하면 비트맵 인덱스를 생성</td></tr><tr><td>IF NOT EXISTS</td><td><ul><li>인덱스가 이미 존재하는 경우에도 에러를 발생시키지 않고 성공 메시지를 반환</li><li>인덱스가 존재하지 않는 경우에는 기존 CREATE 문과 동일하게 동작</li></ul></td></tr><tr><td>schema</td><td><ul><li>인덱스를 생성할 스키마를 명시</li><li>생략하면 현재 사용자의 스키마로 인식됨</li></ul></td></tr><tr><td>index_name</td><td>생성할 인덱스의 이름을 명시</td></tr><tr><td>ON table_index_clause</td><td>인덱스를 생성할 테이블의 구체적인 내용을 명시</td></tr><tr><td>UNUSABLE</td><td><ul><li>인덱스를 사용할 수 없는 상태로 생성</li><li>이 인덱스를 사용하려면 ALTER INDEX의 REBUILD를 통해 재생성해야 함</li></ul></td></tr></tbody></table>

– table\_index\_clause

<table><thead><tr><th width="190">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>schema</td><td><ul><li>인덱스를 생성할 테이블이 속한 스키마를 명시</li><li>생략하면 현재 사용자의 스키마로 인식됨</li></ul></td></tr><tr><td>table_name</td><td>인덱스를 생성할 테이블의 이름을 명시</td></tr><tr><td>column_expr</td><td><ul><li>인덱스 키로 사용할 컬럼 이름 또는 표현식을 명시</li><li>인덱스 키로는 LONG, LONG RAW 타입, 대용량 객체형 등이 올 수 없음</li><li>user function 등의 expression과 그 결과 값에도 동일한 제한이 적용됨</li><li>같은 키를 갖는 인덱스가 데이터베이스에 이미 존재하면 동일한 인덱스를 생성할 수 없음</li><li>이는 중복된 인덱스 사용으로 불필요하게 효율이 떨어지는 것을 막기 위함임. 따라서 같은 인덱스를 만들기보다는 이미 만들어진 인덱스에 대한 권한을 얻어 사용하는 것이 좋음</li><li>인덱스 키 표현식에서 사용자 정의 함수를 사용하는 경우 함수는 반드시 DETERMINISTIC으로 선언되어야 함</li><li>사용한 함수가 변경되거나 삭제되면 해당 인덱스는 사용할 수 없는 상태가 됨</li><li>또한 인덱스 키 표현식에서 사용하는 함수는 항상 동일한 결과 값을 가져야 함</li><li>예를 들어 SYSDATE처럼 결과 값이 변하는 함수는 사용할 수 없음</li><li>인덱스 키의 최대 길이(메타데이터 포함)는 데이터베이스 블록 크기에 따라 달라지며, 8K 블록 기준 약 6,430 바이트까지 지원</li></ul></td></tr><tr><td>ASC</td><td>컬럼 값의 정렬 순서를 오름차순으로 지정(기본값)</td></tr><tr><td>DESC</td><td><ul><li>컬럼 값의 정렬 순서를 내림차순으로 지정</li><li>내림차순 정렬 순서는 다음과 같은 경우에 사용<br><br>– 복합 키로 사용하는 경우: 컬럼 A는 오름차순으로 정렬하되, 컬럼 A가 동일한 값을 가질 때 B를 내림차순으로 정렬하려면 <code>(A, B DESC)</code>를 지정하면 됨.<br><br>– 키가 삽입되는 순서가 내림차순인 경우: Tibero 인덱스는 주로 오름차순으로 삽입되는 경우에 최적화되어 설계됨. 따라서 키가 주로 내림차순으로 삽입되면 내림차순으로 정렬해야 인덱스 효율이 더 좋아짐.</li></ul></td></tr><tr><td>index_properties</td><td>인덱스의 구체적인 속성을 지정</td></tr><tr><td>tde_range</td><td>암호화 테이블의 인덱스를 이용해 Range 스캔을 수행할지 여부를 설정</td></tr></tbody></table>

* index\_properties

<table><thead><tr><th width="271">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>index_attributes</td><td>인덱스의 물리적인 속성을 지정</td></tr><tr><td>index_local_partition_clause</td><td><ul><li>로컬 파티션 인덱스를 생성</li><li>테이블의 파티션과 동일한 개수로 생성되며, 테이블 파티션이 변경되면 인덱스 파티션도 자동으로 같이 변경됨</li></ul></td></tr><tr><td>index_global_partition_clause</td><td><ul><li>글로벌 파티션 인덱스를 생성</li><li>테이블의 파티션 여부와 상관없이 인덱스 고유의 파티셔닝을 지정하여 인덱스를 생성</li></ul></td></tr></tbody></table>

* index\_attributes

<table><thead><tr><th width="257">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>sgmt_attr</td><td>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</td></tr><tr><td>index_compression</td><td>인덱스의 압축 여부를 지정</td></tr><tr><td>TABLESPACE (DEFAULT)</td><td><ul><li>인덱스를 생성할 테이블스페이스를 지정</li><li>생략하거나 DEFAULT로 설정하면 기반 테이블이 있는 테이블스페이스에 인덱스를 생성</li></ul></td></tr><tr><td>REVERSE</td><td><ul><li>ROWID를 제외한 인덱스 블록의 byte 순서를 역순으로 저장</li><li>비슷한 키 값이 집중된 경우 이를 분산하고 싶을 때 사용</li></ul></td></tr><tr><td>ONLINE</td><td>인덱스 생성 도중 DML을 허용할 때 사용</td></tr><tr><td>INVISIBLE</td><td><ul><li>인덱스의 상태 옵션</li><li>인덱스의 VISIBLE 여부와 INVISIBLE 여부는 Optimizer가 해당 인덱스를 고려하는지 여부와 관련이 있음</li><li>INVISIBLE 상태인 인덱스는 DML 과정에서 일반 인덱스처럼 형태를 계속 유지</li><li>하지만 Optimizer가 고려 대상으로 삼지 않음</li></ul></td></tr><tr><td>COMPUTE STATISTICS</td><td><ul><li>인덱스 생성 직후 인덱스 통계 정보를 수집할 때 사용</li><li>B-Tree INDEX와 IOT Secondary INDEX일 때만 사용할 수 있음</li></ul></td></tr></tbody></table>

* index\_local\_partition\_clause

<table><thead><tr><th width="275">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>on_range_partitioned_table</td><td><ul><li>RANGE 파티션 테이블에 대한 로컬 파티션 인덱스를 생성할 때 사용</li><li>PARTITION 절을 사용할 경우 PARTITION 절의 개수는 테이블의 파티션 개수와 동일해야 하며, 맞지 않으면 에러가 발생</li><li>자세한 내용은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr><tr><td>on_list_partitioned_table</td><td><ul><li>LIST 파티션 테이블에 대한 로컬 파티션 인덱스를 생성할 때 사용</li><li>자세한 내용은 on_range_partitioned_table을 참고</li></ul></td></tr><tr><td>on_hash_partitioned_table</td><td><ul><li>HASH 파티션 테이블에 대한 로컬 파티션 인덱스를 생성할 때 사용</li><li>자세한 내용은 on_range_partitioned_table을 참고</li></ul></td></tr><tr><td>on_composite_partitioned_table</td><td><ul><li>복합 파티션 테이블에 대한 로컬 파티션 인덱스를 생성할 때 사용</li><li>자세한 내용은 on_range_partitioned_table을 참고</li></ul></td></tr></tbody></table>

* on\_range\_partitioned\_table

<table><thead><tr><th width="263">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>partition_name</td><td>인덱스 파티션의 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>sgmt_attr</td><td><ul><li>sgmt_attr는 인덱스 파티션으로 사용될 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr></tbody></table>

* on\_list\_partitioned\_table

<table><thead><tr><th width="258">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>partition_name</td><td>인덱스 파티션의 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>sgmt_attr</td><td><ul><li>sgmt_attr는 인덱스 파티션으로 사용될 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr></tbody></table>

* on\_hash\_partitioned\_table

<table><thead><tr><th width="262">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>STORE IN</td><td><ul><li>각 파티션이 위치할 테이블스페이스를 지정</li><li>테이블스페이스를 지정한 개수가 파티션 개수와 일치할 필요는 없으며, 개수가 서로 다르면 라운드 로빈(round-robin) 방식으로 테이블스페이스가 차례대로 지정됨</li></ul></td></tr><tr><td>tablespace</td><td>테이블스페이스를 명시</td></tr><tr><td>partition_name</td><td>인덱스 파티션 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>sgmt_attr</td><td><ul><li>sgmt_attr는 인덱스 파티션으로 사용할 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr></tbody></table>

* on\_composite\_partitioned\_table

<table><thead><tr><th width="288">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>partition_name</td><td>인덱스 파티션의 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>sgmt_attr</td><td><ul><li>sgmt_attr는 인덱스 파티션으로 사용될 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr><tr><td>index_subpartition_clause</td><td><ul><li>각 서브 파티션의 세부적인 설정을 지정</li><li>단, STORE IN은 서브 파티셔닝 방법이 HASH일 경우에만 사용할 수 있음</li><li>서브 파티션이라는 점 외에 다른 문법은 기본 파티셔닝과 동일</li><li>자세한 내용은 on_range_partitioned_table을 참고</li></ul></td></tr></tbody></table>

* index\_subpartition\_clause

<table><thead><tr><th width="279">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>STORE IN</td><td><ul><li>서브 파티셔닝 방법이 HASH인 경우에만 사용할 수 있음</li><li>STORE IN 절은 각 파티션이 위치할 테이블스페이스를 지정</li><li>테이블스페이스를 지정한 개수가 파티션 개수와 일치할 필요는 없으며, 개수가 서로 다르면 라운드 로빈 방식으로 테이블스페이스가 차례대로 지정됨</li></ul></td></tr><tr><td>tablespace</td><td>테이블스페이스를 명시</td></tr><tr><td>subpartition_name</td><td>인덱스 서브 파티션 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>sgmt_attr</td><td><ul><li>인덱스 서브 파티션으로 사용할 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr></tbody></table>

* index\_global\_partition\_clause

<table><thead><tr><th width="269">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>RANGE</td><td>인덱스 파티셔닝 방법을 RANGE 파티션으로 설정</td></tr><tr><td>HASH</td><td>인덱스 파티셔닝 방법을 HASH 파티션으로 설정</td></tr><tr><td>column</td><td><ul><li>인덱스 키 컬럼으로 사용된 컬럼 중에서 파티션 기준이 되는 컬럼을 지정</li><li>단, 파티션 키 컬럼은 인덱스 키 컬럼의 앞부분을 반드시 포함해야 함</li><li>즉, 인덱스 키가 <code>(a, b, c)</code>라면 <code>(a)</code>, <code>(a, b)</code>, <code>(a, b, c)</code>를 파티션 키 컬럼으로 지정할 수 있음</li><li>인덱스 키 컬럼의 앞부분을 포함하지 않도록 파티션 키를 지정하면 에러가 발생</li><li>인덱스를 어떤 기준으로 파티션할지는 테이블이 어떻게 파티션되어 있는지와는 관계가 없음</li><li>테이블이 파티션되는 방식과 인덱스가 파티션되는 방식은 다를 수 있음</li><li>또한 테이블이 파티션되어 있지 않더라도 인덱스는 파티션할 수 있고, 반대로 테이블이 파티션되어 있더라도 인덱스는 파티션되지 않을 수 있음</li></ul></td></tr><tr><td>index_partitioning_clause</td><td>RANGE 파티션 인덱스의 세부 속성을 지정</td></tr><tr><td>hash_partition_desc</td><td>HASH 파티션의 세부 속성을 지정</td></tr><tr><td>hash_partitions_by_quantity</td><td>HASH 파티션을 파티션 개수와 테이블스페이스만 지정해 간단히 생성할 수 있도록 하는 문법</td></tr></tbody></table>

* index\_partitioning\_clause

<table><thead><tr><th width="249">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>partition_name</td><td>인덱스 파티션 이름을 지정할 때 사용하며, 지정하지 않으면 시스템이 자동으로 생성</td></tr><tr><td>value</td><td><ul><li>파티션을 나눌 기준 값을 지정</li><li>value로 지정한 값보다 작은 값이 해당 파티션에 포함</li><li>MAXVALUE로 지정하면 다른 파티션에 속하지 않는 모든 값이 해당 파티션에 포함</li><li>column에서 사용한 컬럼 수와 값의 개수가 같아야 함</li></ul></td></tr><tr><td>sgmt_attr</td><td><ul><li>인덱스 파티션으로 사용할 세그먼트의 속성을 지정</li><li>sgmt_attr 관련 문법은 “<a href="/tibero-manuals/7.2.6.manuals/sql-reference-guide/data-definition-language/common-syntax-elements.md#sgmt_attr">Sgmt_attr</a>”을 참고</li></ul></td></tr></tbody></table>

* index\_compression

<table><thead><tr><th width="277">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>COMPRESS unsigned_integer</td><td><ul><li>인덱스를 압축</li><li>인덱스 키 컬럼의 상위 unsigned_integer개를 prefix key로 하여 index leaf block에서 중복되는 부분을 압축</li><li>unsigned_integer의 기본값은 UNIQUE INDEX일 경우 인덱스 키 컬럼 수 - 1이고, 그 외의 경우에는 인덱스 키 컬럼 수와 같음</li></ul></td></tr><tr><td>COMPRESS ADVANCED LOW</td><td>아직 지원하지 않는 기능</td></tr><tr><td>NOCOMPRESS</td><td>인덱스를 압축하지 않음</td></tr></tbody></table>

* **예제**

– create\_index

다음은 **UNUSABLE**을 명시해 인덱스를 사용 불가능한 상태로 생성하는 예입니다.

```
SQL> CREATE INDEX i ON t (a) UNUSABLE;
Index 'I' created.
```

– table\_index\_clause

다음은 **column\_expr**을 명시해 인덱스를 생성하는 예입니다.

```
SQL> CREATE TABLE t (a NUMBER, b VARCHAR(10));
Table 'T' created.

SQL> CREATE UNIQUE INDEX i ON t (a);
Index 'I' created.

SQL> CREATE INDEX i2 ON t (UPPER(b));
Index 'I2' created.
```

다음은 **column\_expr**에 명시한 인덱스 키로 LONG 타입, LONG RAW 타입, 대용량 객체형 데이터 타입을 사용한 경우 에러가 발생하는 예입니다.

```
SQL> CREATE TABLE t (a NUMBER, b LONG);
Table 'T' created.

SQL> CREATE UNIQUE INDEX i ON t(a, b);
TBR-8063: LONG columns are not permitted.
```

다음은 **column\_expr**에 명시한 인덱스 키와 같은 키를 갖는 인덱스가 이미 존재할 경우 에러가 발생하는 예입니다.

```
SQL> CREATE UNIQUE INDEX i ON t (a);
Index 'I' created.

SQL> CREATE UNIQUE INDEX j ON t (a);
TBR-7124: Duplicate index exists.
```

다음은 **column\_expr**에 사용자 정의 함수를 사용할 때 사용자 정의 함수가 DETERMINISTIC으로 선언되지 않았을 경우 에러가 발생하는 예입니다.

```sql
SQL> CREATE TABLE t (a NUMBER);
Table 'T' created.

SQL> CREATE FUNCTION plus4 (a NUMBER)
  2  RETURN NUMBER
  3  AS
  4  BEGIN
  5      RETURN a + 4;
  6  END;
  7  /
Function 'PLUS4' created.

SQL> CREATE INDEX i ON t (plus4(a));
TBR-8082: Non-deterministic functions, date or system variables cannot be used in this clause.
```

```sql
SQL> CREATE TABLE t (a NUMBER);
Table 'T' created.

SQL> CREATE INDEX i ON t (SYSDATE);
TBR-8082: Non-deterministic functions, date or system variables cannot be used in this clause.
```

위의 예에서 SYSDATE 함수는 결과 값이 항상 변하기 때문에 사용할 수 없습니다.

다음은 **UNIQUE**를 명시하여 유일 인덱스를 생성하는 예입니다.

```
SQL> CREATE UNIQUE INDEX i ON t (a);
Index 'I' created.

SQL> INSERT INTO t VALUES (1);
1 row inserted.

SQL> INSERT INTO t VALUES (1);
TBR-10007: unique constraint violated.
```

다음은 **DESC**를 명시하여 인덱스를 내림차순으로 생성하는 예입니다.

```
SQL> CREATE TABLE t (a NUMBER, b NUMBER);
Table 'T' created.

SQL> CREATE UNIQUE INDEX i ON t (a, b DESC);
Index 'I' created.
```

* index\_attributes

다음은 **TABLESPACE**를 명시하여 인덱스를 생성할 테이블스페이스를 지정하는 예입니다.

```
SQL> CONN sys/tibero
Connected.

SQL> CREATE TABLESPACE ts DATAFILE '/usr/ts.df' SIZE 10M;
Tablespace created.

SQL> CONN u1/u1
Connected.

SQL> CREATE INDEX i ON t (a) TABLESPACE ts;
Index 'I' created.
```

– index\_local\_partition\_clause

다음은 **index\_local\_partition\_clause**를 명시하여 로컬 파티션 인덱스를 생성하는 예입니다.

```sql
SQL> CREATE TABLE t (a NUMBER, b NUMBER, c NUMBER)
     PARTITION BY RANGE (a, b)
       (PARTITION p1 VALUES LESS THAN (10, 10)
          TABLESPACE ts1, PARTITION p2
          VALUES LESS THAN (MAXVALUE, MAXVALUE)
          TABLESPACE ts2);
Table 'T' created.

SQL> CREATE INDEX i ON t (a, b) LOCAL
       (PARTITION p1, PARTITION p2, PARTITION p3);
TBR-7159: Number of local index partitions does not match the number of table partitions.

SQL> CREATE INDEX i ON t (a, b) LOCAL
       (PARTITION p1 INITRANS 10, PARTITION p2 STORAGE (MAXEXTENTS 100));
Index 'I' created.
```

다음은 **index\_local\_partition\_clause**를 명시하여 로컬 파티션 인덱스를 생성하는 예입니다.

```sql
SQL> CONN sys/tibero
Connected.

SQL> CREATE TABLESPACE ts1 DATAFILE '/usr/ts1.df' SIZE 10M;
Tablespace 'TS1' created.

SQL> CREATE TABLESPACE ts2 DATAFILE '/usr/ts2.df' SIZE 10M;
Tablespace 'TS2' created.

SQL> CONN u1/u1
Connected.

SQL> CREATE TABLE t (a NUMBER, b NUMBER, c NUMBER)
     PARTITION BY RANGE (a, b)
     (PARTITION p1 VALUES LESS THAN (10, 10)
        TABLESPACE ts1,
      PARTITION p2 VALUES LESS THAN (MAXVALUE, MAXVALUE)
        TABLESPACE ts2);
Table 'T' created.

SQL> CREATE INDEX i ON t (a, b) LOCAL;
Index 'I' created.
```

– index\_global\_partition\_clause

다음은 **index\_global\_partition\_clause**를 명시하여 글로벌 파티션 인덱스를 생성하는 예입니다.

```
SQL> CONN sys/tibero
Connected.

SQL> CREATE TABLESPACE ts1 DATAFILE '/usr/ts1.df' SIZE 10M;
Tablespace 'TS1' created.

SQL> CREATE TABLESPACE ts2 DATAFILE '/usr/ts2.df' SIZE 10M;
Tablespace 'TS2' created.

SQL> CONN u1/u1
Connected.

SQL> CREATE TABLE t (a NUMBER, b NUMBER, c NUMBER);
Table 'T' created.

SQL> CREATE INDEX i ON t (a, b, c) GLOBAL PARTITION BY RANGE (a, b)
     (PARTITION p1 VALUES LESS THAN (10, 10)
         TABLESPACE ts1, PARTITION p2
         VALUES LESS THAN (MAXVALUE, MAXVALUE) TABLESPACE ts2);
Index 'I' created.
```

다음은 **index\_global\_partition\_clause**의 구성요소인 **column** 부분을 명시할 때 파티션 키 컬럼을 잘못 지정했을 경우 에러가 발생하는 예입니다.

```
SQL> CREATE INDEX i ON t (a, b)
       GLOBAL PARTITION BY RANGE (b)
         (PARTITION p1 VALUES LESS THAN (10)       TABLESPACE ts1,
          PARTITION p2 VALUES LESS THAN (MAXVALUE) TABLESPACE ts2);

TBR-7225: Global partition index must be prefixed by the partition key column.
```

다음은 **index\_global\_partition\_clause**의 구성요소인 **column** 부분을 명시할 때 DESC로 지정된 인덱스 키 컬럼을 파티션 키로 지정할 경우 에러가 발생하는 예입니다.

```
SQL> CREATE INDEX i ON t (a, b DESC)
         GLOBAL PARTITION BY RANGE (a, b)
             (PARTITION p1 VALUES LESS THAN (10, 10)
              TABLESPACE ts1, PARTITION p2 VALUES LESS THAN
                  (MAXVALUE, MAXVALUE) TABLESPACE ts2);
TBR-7225: Global partition index must be prefixed by the partition key column.
```

다음은 **index\_global\_partition\_clause**의 구성요소인 **value** 부분을 명시할 때 값의 수가 컬럼 개수와 맞지 않거나 값이 정렬되지 않은 경우 에러가 발생하는 예입니다.

```
SQL> CREATE INDEX i ON t (a, b)
       GLOBAL PARTITION BY RANGE (a, b)
         (PARTITION p1
            VALUES LESS THAN (10) TABLESPACE ts1,
          PARTITION p2 VALUES LESS THAN (MAXVALUE)
            TABLESPACE ts2);

TBR-7163: specified partition values are not correct.
```

다음은 **index\_global\_partition\_clause**의 구성요소인 **value** 부분을 명시할 때 컬럼 타입이 맞지 않을 경우 에러가 발생하는 예입니다.

```
SQL> CREATE INDEX i ON t (a, b)
        GLOBAL PARTITION BY RANGE (a)
        (PARTITION p1 VALUES LESS THAN ('abc') TABLESPACE ts1,
         PARTITION p2 VALUES LESS THAN (MAXVALUE) TABLESPACE ts2);
TBR-5074: given string does not represent a number in proper format.
```

다음은 **index\_global\_partition\_clause**의 구성요소인 **value** 부분을 명시할 때 MAXVALUE를 지정하지 않을 경우 에러가 발생하는 예입니다.

```
SQL> CREATE INDEX i ON t (a, b)
        GLOBAL PARTITION BY RANGE (a, b)
        (PARTITION p1 VALUES LESS THAN (10, 20) TABLESPACE ts1,
         PARTITION p2 VALUES LESS THAN (30, 40) TABLESPACE ts2);
TBR-7429: When creating global range partitioned index,
the partition whose partitioning key columns'
values are all MAXVALUE should be specified.
```

– index\_compression

다음은 **index\_compression**을 명시하여 압축 인덱스를 생성하는 예입니다.

```sql
SQL> CREATE INDEX i ON t (a, b) COMPRESS;
Index 'I' created.
```

다음은 **index\_compression**의 구성요소인 **unsigned\_integer** 부분을 명시할 때 잘못된 prefix length 값을 입력할 경우 에러가 발생하는 예입니다.

```sql
SQL> CREATE INDEX i ON t (a) COMPRESS 2;
TBR-7551: Invalid COMPRESS prefix length value

SQL> CREATE INDEX i ON t (a) COMPRESS 0;
TBR-7551: Invalid COMPRESS prefix length value

SQL> CREATE UNIQUE INDEX i ON t (a, b) COMPRESS 2;
TBR-7551 : Invalid COMPRESS prefix length value

SQL> CREATE UNIQUE INDEX i ON t (a) COMPRESS;
TBR-7552 : Cannot use COMPRESS option for a single column key
```

다음은 **index\_compression**에서 비트맵 인덱스에 COMPRESS를 사용하면 에러가 발생하는 예입니다.

```sql
SQL> CREATE BITMAP INDEX i ON t (a) COMPRESS;
TBR-7013 : This option cannot be specified.
```

다음은 **index\_compression**에서 IOT Secondary INDEX에 COMPRESS를 사용할 수 있는 예입니다.

```sql
SQL> CREATE TABLE t (A NUMBER PRIMARY KEY, B NUMBER) ORGANIZATION INDEX;
Table 'T' created.

SQL> CREATE INDEX i ON t (b) COMPRESS;
Index 'I' created.
```
