HANA Index Types
-
Primary key index
- 대부분의 테이블에는 primary key 존재 -> 개별 행마다 고유한 식별자 제공
- 보통 여러 개의 attribute로 구성
- Column store에서는 각 primary key를 위해 자동으로 여러개의 인덱스를 생성
- A Table with primary key (MANDT, KNR, RNR)
-> 분리된 inverted index on MANDT, on KNR, on RNR
- A Table with primary key (MANDT, KNR, RNR)
- Column dictionary가 이미 정렬되어 있는데 인덱스가 필요한 이유는?
- Dictionary를 읽은 후에 결국은 Attribute Vector를 모두 읽어야 함
- 이를 개선하기 위한 inverted index
-
Secondary Index
- 각 행별로 고유 식별자를 제공하고 하나 이상의 여러 인덱스에 의해 지원되는 Primary key와는 별개로 임의의 수의 Secondary index 생성 가능
- Uniqeue and non-unique index 모두 지원됨
- Multi-Colum Index
- 3가지 종류
- Inverted value index --> Default index
- Concatenation string of all values of the attributes for each individual row
- Column Stoe에서만 사용됨
- Inverted hash index
- Inverted value index와 같이 key를 구성하는 경우 value값들이 너무 긴 겨우에는 메모리 과소비 가능 -> 이를 위해서 concated value를 hash로 변경하여 사용
- 메모리 과소비는 어느정도 줄임 -> 성능상의 이점은 다른 이야기
- Internal key column의 dictionary에 이렇게 생성된 hash 값이 저장됨
- Inverted individual index
- Column store 테이블의 하나 이상의 컬럼을 가진 index 중 특수한 type으로 concatenate를 수행하지 않음
- Light-weight inverted index structure를 가짐 (개별 컬럼으로 관리)
- Inverted value index --> Default index
- 3가지 종류
- When to create Indexes
- Indexes are particularly useful when a query contains HIGHLY SELECTIVE predicates that help to reduce the intemediate results quickly.
Column Store JOIN Operation
- 다음 쿼리를 수행 하는 경우
SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE a IN ('B','C'); - 처리방식
> Full Scan이 수행되어야 함 -> 만약에 여기서 Index가 있다면?
- Join Key Index usage decision
- Use the index if attribute has to look up a small number of selective values
- DO NOT use the index if the results are shrunk by filter condition or Values are unselective
'Database' 카테고리의 다른 글
[HANA] Parameter 정리 (0) | 2019.04.26 |
---|---|
[HANA] HANA Temporary Table (0) | 2019.04.23 |
[HANA] In-Memory Computing 기본-2 (0) | 2019.04.21 |
[HANA] In-Memory Computing 기본-1 (1) | 2019.04.21 |
[HANA] Calculation View (0) | 2019.04.20 |