Secondary Indexes
02 September 2017
CQL은 테이블에 대한 보조 인덱스 생성을 지원하므로 테이블에 대한 쿼리를 통해 해당 인덱스를 사용할 수 있습니다.
보조 인덱스는 다음에 의해 정의 된 이름으로 식별됩니다.
index_name ::= re('[a-zA-Z_0-9]+')
CREATE INDEX
테이블에 보조 인덱스를 생성할 때는 CREATE INDEX 문을 사용합니다.
create_index_statement ::= CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ index_name ]
ON table_name '(' index_identifier ')'
[ USING string [ WITH OPTIONS = map_literal ] ]
index_identifier ::= column_name
| ( KEYS | VALUES | ENTRIES | FULL ) '(' column_name ')'
예를 들어 :CREATE INDEX userIndex ON NerdMovies (user);
CREATE INDEX ON Mutants (abilityId);
CREATE INDEX ON users (keys(favs));
CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass';
CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass' WITH OPTIONS = {'storage': '/mnt/ssd/indexes/'};
CREATE INDEX 문은 주어진 테이블에서 주어진 칼럼에 대한 새로운 2차 인덱스를 작성하는 데 사용됩니다.원할 경우, ON 키워드 앞에 인덱스 자체의 이름을 지정할 수 있습니다.
데이터가 이미 해당 열에 존재하면 비동기적으로 해당 데이터에 대해 인덱스가 적용됩니다.
인덱스가 생성된 후 열에 대한 새 데이터는 삽입시 자동으로 인덱싱됩니다.
IF NOT EXISTS 옵션을 사용하지 않으면 이미 존재하는 인덱스를 만들려고 하는 경우 오류가 반환됩니다.
사용하는 경우, 인덱스가 이미 존재하면 명령문은 실행되지 않습니다.
Indexes on Map Keys
맵에 인덱스를 만들 때는 키 또는 값을 인덱싱 할 수 있습니다.
열 식별자가 keys () 함수 내에 칼럼의 구분자가 있으면 인덱스가 맵 키에 있으므로 WHERE 절에 CONTAINS KEY를 사용할 수 있습니다.
그렇지 않은 경우는 인덱스가 맵 값에 있게 됩니다.
DROP INDEX
보조 인덱스를 삭제할 때에는 DROP INDEX 문이 사용됩니다.
drop_index_statement ::= DROP INDEX [ IF EXISTS ] index_name
DROP INDEX 문은 기존 보조 인덱스를 삭제할 때 사용됩니다.명령문의 인수는 인덱스 이름이며, 선택적으로 색인의 키 스페이스를 지정할 수 있습니다.
인덱스가 존재하지 않으면 IF EXISTS가 사용되지 않는 한 명령문은 오류를 리턴합니다.
사용되는 경우, 명령문은 실행되지 않습니다.
출처 : http://cassandra.apache.org/doc/latest/cql/indexes.html