Index 알아보기
in Database
Index 필요성과 주의사항에 대해 알아보기
면접 필수 질문이자 데이터베이스에서 중요한 인덱스에 대해 정리해보았습니다.
면접 질문
Index가 필요한 이유는?
- 테이블 검색 성능을 높여주는 대표적인 방법 중 하나입니다.
- 일반적인 RDBMS에서는 B+Tree 구조로 된 Index를 사용하여 검색속도를 향상시킵니다.
Index는 책마다 마지막 페이지에 있는 색인과 같은 역할을 하는 자료구조 입니다.
책에서 어떤 용어나 단어를 찾기위해 첫 페이지를 끝 페이지까지 훑지 않아도(Full Table Scan),
Index를 찾아보면 몇 페이지에 있는지 바로 찾을 수 있는 것과 같습니다.
SELECT 쿼리를 통해 데이터를 찾을 때, 정렬되어 있는 Index에서 빠르게 검색을 할 수 있습니다.
Index는 어떤 컬럼에 지정해야 할까요?
- Where 절에서 자주 조회되고,
- 수정 빈도가 낮으며,
- 카디널리티는 높고,
- 선택도가 낮은 컬럼을 선택하는 것이 좋습니다.
카디널리티란 특정 컬럼의 중복되지 않는 정도를 뜻합니다.
선택도란 데이터 집합에서 특정 값을 잘 골라낼 수 있는 정도를 뜻합니다.
(선택도가 1이라는 뜻은 모든 값이 유니크하다는 의미입니다.)
Index의 단점은?
- 추가 저장공간이 필요합니다.
: Index를 생성하면, Index 자료구조를 위한 저장 공간이 추가적으로 필요합니다.
(보통 테이블 크기의 10% 공간을 차지합니다.) - 데이터 변경 작업이 느립니다.
보통 B+Tree 구조의 Index는 데이터 변경 시 Tree 구조가 변경 될 수 있어 인덱스의 재구성이 필요하게 되므로,
변경이 자주 일어나게 되면 성능이 나빠질 수 있습니다.
Index
Clustering Index & Secondary Index
- Clustering Index : 특정 컬럼을 기본키로 지정하면 자동으로 클러스터형 인덱스가 생성하고, 해당 컬럼 기준으로 정렬 됩니다.
- Secondary Index : 별도로 인덱스를 생성하거나 고유키(unique key)로 지정하면 별도의 공간에 인덱스가 생성됩니다.
B+Tree Index
- 항상 정렬된 상태를 유지하여 부등호 연산에 유리합니다.
- 데이터 탐색 뿐만 아니라 저장, 수정, 삭제에도 항상 O(logN)의 시간 복잡도를 갖습니다.
Hash Index
- 빠른 데이터 검색 O(1)이 필요할 때 유용합니다.
- 하지만 사용되는 경우가 제한적입니다.
- 그 이유는 hash index는 등호(=) 연산에만 특화되어 있기 때문입니다.
- 데이터가 조금이라도 달라지면 hash function은 전혀 다른 hash 값을 생성하기 때문에,
- 부등호 연산(>, <)이 자주 사용되는 DB 검색에는 적합하지 않습니다.