소피it블로그

[DB] 인덱스(Index) 본문

CS/데이터베이스

[DB] 인덱스(Index)

sophie_l 2022. 11. 13. 18:19

1. 인덱스를 사용하는 이유

자주 사용되는 칼럼에 대하여 인덱스 테이블을 따로 만들면 데이터를 빠르게 검색할 수 있다. 

2. B-Tree

인덱스는 보통 B-Tree 자료구조로 이루어져 있는데, 균형 잡힌 트리 구조와 트리 깊이의 대수확장성(트리 깊이가 리프 노드 수에 비해 매우 느리게 성장함) 덕분에 매우 효율적인 검색이 가능해진다.

루트 노드에서 시작하여 브랜치 노드들을 거쳐 찾고자 하는 데이터가 있을 법한 리프 노드에 들어가 탐색하는 방식으로 작동하며, 리프 노드에 도달한 후에 데이터 포인터를 통해 결괏값을 반환한다.

해시 테이블 대신 B-Tree를 사용하는 이유는, SELECT 질의 조건에는 부등호 연산도 포함되는데 해시 테이블은 동등 연산에 특화된 구조이기 때문이다.

3. 주의할 점

무조건 인덱스를 사용하는 것은 지양하여야 한다. 인덱스를 사용하는 것이 오히려 성능상 비효율적인 경우도 있다.

인덱스를 사용할 경우 두 번 탐색을 해야 하기 때문에, 관련 읽기 비용이 든다. 또한, 컬렉션이 수정되었을 때 인덱스도 수정되어야 하는데, 이 때 B-Tree의 높이를 균형 있게 조절하고 데이터를 효율적으로 분산시키는 비용도 든다.

복합 인덱싱을 효율적으로 하기 위해서는 값끼리 같음을 비교하는 ==나 equal이 포함된 쿼리를 먼저 인덱스로 설정하는 것이 좋다. 또한 카디널리티(유니크한 값의 정도)가 높은 순서를 기반으로 인덱스를 생성하는 것이 효율적이다. 카디널리티가 낮은(=중복도가 높은) 성별 등의 컬럼은 인덱스로 만들어도 성능상의 이점이 없다.

 

참고자료:

 

https://github.com/WeareSoft/tech-interview/blob/master/contents/db.md#4-database

 

GitHub - WeareSoft/tech-interview: 🙍 tech interview

:loudspeaker:🙍 tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

http://www.yes24.com/Product/Goods/108887922

 

면접을 위한 CS 전공지식 노트 - YES24

디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지!CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다!개발자 면접에서 큰 비중을 차지하는 CS(Comp

www.yes24.com