Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

마크베이스의 로그테이블에는 2가지 인덱스 타입을 생성할 수 있다.

...

 

자세한 내용은 SQL 레퍼런스의 DDL 페이지의 CREATE INDEX 문단을 참조하면 된다.

  • LSM 인덱스 : LSM인덱스는 Text, Binary 타입을 제외한 모든 컬럼에 생성할 수 있다.
  • KEYWORD 인덱스

...

  • : Varchar, Text

...

  • 컬럼에만 생성 가능하며 문자열을 검색할 때 사용한다.

LSM 인덱스

LSM(Log Structure Merge) Index로 Big Data에 저장 및 검색에 최적화된 Index이다. LSM Index들의 Partition들은 Level 별로 유지되고 하위 Level의 Partition들이 Merge되어 상위 Level로 이동한다. 그리고 상위 Level의 Partition 생성에 사용된 하위 Partition들은 삭제된다.
이러한 Index Level Partition Building은 Background Thread 에 의해서 수행된다. 상위 Level Partition은 하위 Level의 Partition 들이 Merge되어 하나의 Partition으로 생성되기 때문에 Index를 통한 검색시 다음과 같은 장점이 존재한다.
1. Key가 중복된 경우, 한번만 저장되기 때문에 Key 저장을 위한 Disk Space가 절약된다.
2. 여러 개의 Partition에 대한 Searching보다 하나의 Index Partition에 대한 검색시 File Open 및 Close 비용이 줄어들고, 접근하는 Index Page의 개수 또한 줄어든다.

...

MAX_LEVEL

(DEFAULT = 2, MIN = 0, MAX = 3 )

...

하나의 인덱스 파티션당 저장하는 최대 데이터 건수는 200만건이다.

PART_VALUE_COUNT가 100,000 이라면, Level 0 = 100,000, Level 1 = 1,000,000, Level 2 = 10,000,000, Level 3 = 100,000,000 건이 된다.

...

PAGE_SIZE
(DEFAULT = 512 * 1024, MIN = 32 * 1024, MAX = 1 * 1024 * 1024)

...

Index의 Key Value와 Bitmap 값이 저장되는 Page의 크기를 지정한다. Default는 512K이다.

...

BLOOM_FILTER
(DEFAULT = 1, DISABLE = 0, ENABLE(DEFAULT) = non_zero_integer)

...

인덱스에 Bloom filter를 설정할 것인지 아닌지를 설정한다. Bloom filter를 설정하면 인덱스에 존재하지 않는 값을 빠르게 검색할 수 있지만 인덱스 생성에 소요되는 시간이 증가한다. Range 조건만을 사용하는 경우, Bloom filter는 이용할 수 없으므로 생성할 필요는 없다. Bloom filter를 생성하지 않을 경우, BLOOM_FILTER = 0으로 설정해야 한다.

...

BITMAP_ENCODE
(DEFAULT = EQUAL, RANGE)

...

인덱스의 Bitmap 타입을 설정한다.
BITMAP_ENCODE=EQUAL(기본값)의 경우 키값과 같은 값에 대한 bitmap을 생성하고 BITMAP=RANGE인 경우 키값의 range에 따른 bitmap을 생성한다.
질의 조건으로 = 을 주로 사용하는 경우 BITMAP_ENCODE=EQUAL로, 특정 범위값을 질의 조건으로 주로 사용하는 경우 BITMAP_ENCODE=RANGE로 설정하는 편이 좋다.
BITMAP=RANGE인 경우 생성 비용은 EQUAL에 비해서 약간 증가한다.


목차


Table of Contents
maxLevel3
indent30px
exclude목차
classtoc



인덱스 생성


CREATE INDEX 구문을 이용하여 특정

...

컬럼에 대해서 인덱스를 생성한다.

...

Code Block
languagesql
CREATE INDEX index_name ON table_name (column_name) [index_type] [tablespace] [index_prop_list]
	index_type ::= INDEX_TYPE { LSM | KEYWORD }
	tablespace ::= TABLESPACE tablesapce_name
	index_prop_list ::= value_pair, value_pair, ...
	value_pair ::= property_name = property_value

...


Code Block
languagesql

...

Mach> CREATE INDEX id_index ON log_data(id) INDEX_TYPE LSM TABLESPACE tbs_data MAX_LEVEL=3;
Created successfully.



인덱스 변경


ALTER INDEX 구문을 이용하여 인덱스 속성을 변경한다.

Syntax:

Code Block
languagesql
ALTER INDEX index_name SET KEY_COMPRESS = { 0 | 1 }

...


Code Block
languagesql

...

Mach> ALTER INDEX id_index SET KEY_COMPRESS = 1;



인덱스 삭제


DROP INDEX 구문을 이용하여 지정된 인덱스를 삭제한다. 단, 해당 테이블을 검색 중인 다른 세션이 존재할 경우에는 에러를 내면서 실패한다.

...

Code Block
languagesql
DROP INDEX index_name;

Example:


Code Block
languagesql

...

Mach> DROP INDEX id_index;
Dropped successfully.