Index
Index란?
Index란 데이터베이스에서 테이블의 검색 성능을 높여주는 대표적인 방법 중 하나이다. 일반적인 관계형 데이터베이스(RDBMS)에서는 B+Tree 구조로 된 Index를 사용하여 검색 속도를 향상시킨다. Index를 활용한다면, SELECT ~ WHERE query를 통해 특정 조건을 만족하는 데이터를 찾을 때 Full Table Sacn할 필요 없이 정렬되어 있는 Index에서 훨씬 빠른 속도로 검색할 수 있게 된다.
Index 구조
BTree, B+Tree, Bitmask, Hash 등으로 구현할 수 있지만, 일반적으로 B+Tree 구조로 구현한다. 구체적으로 Index가 어떻게 이루어져있냐면, 특정 column 값과 실제 데이터의 물리적 주소를 가리키는 pointer 값으로 이루어져있다. 이때, 특정 column값은 정렬되어 저장되고 search-key라고도 한다. 즉, 데이터베이스의 특정 column 값을 선별 기준으로 정렬한 값을 search-key 라고 하고, search-key와 실제 메모리의 물리적 위치인 pointer를 함께 저장한 것이 Index이다.
Index 사용하는 이유
데이터베이스를 점점 사용할 수록 테이블에는 순서 없이 데이터가 쌓이게 되고, 원하는 데이터를 찾는 query문을 실행시키면 시간이 너무 걸려서 실질적으로 쓰기에는 어려움이 있다. (Full Table Scan시, 시간이 너무 오래 걸림)
하지만, 특정 column에 대하여 Index를 생성해놓은 경우, 속성에 대한 search-key가 정렬되어 있기 때문에, 조건 검색 query문인 SELECT ~ WHERE 속도가 빠르다.
클러스터형 인덱스와 보조형 인덱스 (Clustering Index & Secondary Index)
클러스터형 인덱스(Clustering Index)는 특정 Column을 기본키로 설정하면 자동으로 정렬되고, Table 자체가 하나의 index가 된다. 마치 영어사전처럼 책 자체가 정렬된 것과 같다.
보조형 인덱스(Secondary Index)는 별도의 공간에 Index가 생기는 것을 말한다. 기본 인덱스 이외의 인덱스를 말하며, 키의 순서가 정렬되어 있지 않다. 책의 부록처럼 별도의 공간을 떠올리면 된다.
Index의 장, 단점
장점은 검색 속도가 향상된다는 점이다. Index가 아니라면 원하는 값을 찾기 위해 모든 테이블을 탐색해야 할 것이다. 이를 Full Table Scan이라고 한다. Index를 사용한다면 원하는 값에 빨리 도달할 수 있다.
단점은 Index를 생성할 때 공간이 필요하다는 점이다. 보통 하나의 Index는 테이블의 10% 정도 크기를 차지한다. 또한, 데이터가 수정되면 Index 또한 재정렬되어야 하는데, 이때 시간이 소요되는 편이다.
'CS > 데이터베이스' 카테고리의 다른 글
[CS - 데이터베이스] Index를 Hash Table이 아닌, B+Table로 구현하는 이유 (0) | 2023.02.13 |
---|---|
[CS - 데이터베이스] Index에서 Column 사용 (또는 선정) 기준 (0) | 2023.02.13 |
[CS - 데이터베이스] Transaction과 Deadlock (0) | 2023.01.28 |
[CS - 데이터베이스] RDB와 NoSQL (2) | 2023.01.26 |
[CS - 데이터베이스] RDB의 테이블 결합 (left outer join, inner join) (0) | 2023.01.26 |