Index
Index
Point
- Index가 왜 필요하고, 어느 상황에서 필요한지
- Index의 구조
- Index의 장단점
Index란?
Index는 데이터베이스에서 table의 검색 성능을 높여주는 방법 중 하나이다. 일반적으로 B+Tree 구조로 되어있어 검색속도를 향상시킨다.
Index는 책 마지막 페이지에 있는 색인(index)과 같은 역할을 하는 자료구조로써, 책에서 단어를 찾기 위해 전체 페이지를 훑지 않아도(Full table scan), indx를 찾아보면 몇 페이지에 있는지 바로 확인할 수 있다.(Index scan)
Index의 구조
Index는 Btree, B+Tree, Hash, Bitmap으로 구현될 수 있고, 대부분 B+Tree 구조를 가진다. Index를 생성하면 특정 column의 값을 기준으로 정렬 하여 데이터의 물리적 위치와 함께 별도 공간에 저장한다. 이 때 Index에 저장되는 column 값을 search-key 값이라고 하고, 물리적 데이터를 저장한 값을 pointer라고 한다.
Index의 장점
검색속도 향상
Table에 데이터를 지속적으로 저장하면 순서 없이 뒤죽박죽으로 쌓이게 된다. 이 때 하나의 데이터를 찾고자 한다면 table의 record를 처음부터 끝까지 접근하여 찾아야하는 Full Table Scan 과정이 필요하다. 하지만, 특정 column에 대한 Index를 생성해 놓으면, 해당 속성에 대하여 search-key가 정렬되어 저장되어 있기 때문에 검색(Select) 속도가 매우 빠르다.
Index의 단점
추가 저장공간 필요
Index 자료구조를 위한 저장 공간이 추가적으로 필요하다.
느린 데이터 변경 작업
SELECT가 아닌 INSERT, UPDATE, DELETE가 자주 발생하면 성능이 나빠질 수 있다. 보통 B+Tree 구조의 Index는 데이터가 추가, 삭제 될 때 마다 tree의 구조가 변경 될 수 있기 때문이다.
Index의 종류
Clustering index
특정 column을 primary key로 지정하면 자동으로 clustering index가 생성되고, 해당 column을 기준으로 정렬이 된다. 테이블 자체가 정렬된 하나의 index가 되는 것이다.
ex. 가상 idx 키
Secondary index
일반 책의 찾아보기와 같이 별도의 공간에 인덱스를 생성한다. create index 명령문으로 index를 생성하거나 고유키(unique)로 지정하면 보조 인덱스가 생성된다.
Index를 많이 생성하면 좋을까?
index를 생성하면 검색 기능이 향상 될 수 있으나, 추가 저장공간이 필요하고, 추가/수정/삭제를 할 때 마다 관련 index를 전부 수정해줘야하기 때문에 추가적인 일이 발생한다. 따라서, 검색 성능 향상이 필요하다고 판단되는 column에만 index를 생성하는 것이 좋다.
댓글남기기