Primary Index
특징
- 테이블당 하나만 가질 수 있다.
- Insert시 data가 정렬되고 Index는 data block의 첫 번째 레코드의 주소값을 갖게 된다.
- Index가 바로 data block에 접근해서 Secondary Index보다 동작이 빠른 편이다.
- data가 정렬되어 저장되기 때문에 Secondary Index에 비해 범위로 질의를 하는 것이 유리하다.
아래는 범위로 검색하는 예시이다. id=101~104번의 학생을 찾는다고 하면 Index block을 scan한 후에 data block 1을 가져오고 data block 2를 가져오면 범위를 검색할 수 있다. 이렇게 되면 총 3~4번의 I/O이 발생하게 된다.
Secondary Index
특징
- Primary Key 이외에 필요한 정렬 기준이 있을 경우 사용한다.
- 테이블당 여러 개 가질 수 있다.
- data record가 정렬되어 있지 않다.
- Index가 data record의 모든 주소값을 가지고 있어야 한다.
- unique 하지 않아도 된다.
- data record가 index 순서대로 정렬되어 있지 않기 때문에 범위 조건으로 검색하게 되면 많은 I/O가 발생할 수 있다.
대신 좋은 성능을 내기는 어렵다. - index는 모든 레코드에 대한 색인 데이터를 들고 있어야 정렬된다. 따라서 update, delete, insert시 오래 걸릴 수 있고,
primary index에 비해 더 많은 공간을 차지하게 된다.
아래는 예시이다. name이 Jane인 학생을 찾는 과정은 id=105로 Jane을 찾는 것과 비슷하다. 하지만 아스키 코드 순서대로 범위의 레코드를 가져오려면 index block1 부터 data block 4를 모두 읽어야 하기 때문에 I/O이 많이 발생하게 된다.
이처럼 범위로 데이터를 검색하는 경우는 불리하고, 모든 data의 entry에 대해 색인을 가지고 있어야 하기 때문에 많은 공간을 차지하게 된다.
Composite Index(결합 인덱스)
- 결합 인데스란 인덱스를 생성할 때 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것을 말한다.
- 주 용도는 SQL에서 WHERE절의 조건 컬럼이 2개 이상 AND로 연결되어 함께 사용되는 경우에 많이 사용한다.
- 결합 인덱스를 생성할 때 컬럼 순서는 매우 중요하다.
- 첫 번째 조건에서 최대한 많은 데이터를 걸러내서 두 번째 조건을 검사하도록 해야 한다.
'CS(Computer Science)' 카테고리의 다른 글
CS Study 6주차 : B - tree /B + tree (0) | 2022.12.09 |
---|---|
CS Study 6주차 : Hashing / 해시 테이블(Hash Table) (1) | 2022.12.09 |
CS Study 5주차 : Index(인덱스) (0) | 2022.11.30 |
CS Study 4주차 : Blocking/Non-Blocking (0) | 2022.11.25 |
CS Study 3주차 : 로드 밸런싱 (0) | 2022.11.16 |