CREATE INDEX 구문을 이용하여 지정한 테이블에 인덱스를 생성한다. 인덱스 이름 작성 원칙은 식별자 를 참고한다.
인덱스 힌트 구문, 내림차순 인덱스, 커버링 인덱스, 인덱스 스킵 스캔, ORDER BY 최적화, GROUP BY 최적화 등 인덱스를 이용하는 방법과 필터링된 인덱스, 함수 인덱스를 생성하는 방법에 대해서는 질의 최적화 을 참고한다.
CREATE [ UNIQUE ] INDEX index_name
ON table_name <index_col_desc>
<index_col_desc> ::=
( column_name[(prefix_length)] [ASC | DESC] [ {, column_name[(prefix_length)] [ASC | DESC]} ...] ) [ WHERE <filter_predicate> ]
| (function_name (argument_list) )
Warning
CUBRID 9.0 미만 버전에서는 인덱스 이름을 생략할 수 있었으나, CUBRID 9.0 버전부터는 인덱스 이름을 생략할 수 없다.
다음은 내림차순으로 정렬된 인덱스를 생성하는 예제이다.
CREATE INDEX gold_index ON participant(gold DESC);
다음은 다중 칼럼 인덱스를 생성하는 예제이다.
CREATE INDEX name_nation_idx ON athlete(name, nation_code);
다음은 prefix 인덱스를 생성하는 예제이다. 문자열 타입으로 정의한 nation_code 칼럼에 대해서 1바이트 길이만큼 prefix를 지정하여 인덱스를 생성한다.
CREATE INDEX idx_game_nation_code ON game(nation_code(1));
ALTER INDEX 문을 사용하여 인덱스를 재생성한다. 즉, 인덱스를 삭제하고 다시 생성한다. ON 절 뒤에 테이블 이름과 칼럼 이름이 추가되면 해당 테이블 이름과 칼럼 이름으로 인덱스를 재생성한다.
ALTER [ UNIQUE ] INDEX index_name
ON { ONLY } table_name <index_col_desc> REBUILD [ ; ]
<index_col_desc> ::=
( column_name[ {, column_name} ...] ) [ WHERE <filter_predicate> ]
| (function_name (argument_list) )
Warning
CUBRID 9.0 미만 버전에서는 인덱스 이름을 생략할 수 있었으나, CUBRID 9.0 버전부터는 인덱스 이름을 생략할 수 없다.
다음은 인덱스를 재생성하는 여러 가지 방법을 보여주는 예제이다.
ALTER INDEX i_game_medal ON game(medal) REBUILD;
ALTER INDEX game_date_idx REBUILD;
ALTER INDEX char_idx ON athlete(gender, nation_code) WHERE gender='M' AND nation_code='USA' REBUILD;
DROP INDEX 문을 사용하여 인덱스를 삭제할 수 있다.
DROP [ UNIQUE ] INDEX index_name
[ON table_name] [ ; ]
다음은 인덱스를 삭제하는 예제이다.
DROP INDEX game_date_idx ON game;