데이터베이스에서 index는 데이터를 빠르게 찾을 수 있게 도와주는 자료구조입니다.
테이블에 index를 만약에 설정하지 않는다면 최악의 경우 모든 데이터를 다 조회해야하는 O(n)의 시간복잡도가 나올 수 있다. 하지만 인덱스를 도입하게 되면 O(log n)까지 줄일 수 있습니다.
그 이유는 index가 B-tree 자료구조로 형성되어 있기 때문입니다. B-tree 는 Balanced Tree라고 하며, 균형 다진 탐색 트리라고 한다. 모든 리프 노드의 차수가 동일하므로, 트리 높이가 일정하게 유지됩니다. 또한, B-Tree는 각 노드가 여러 개의 키(key)와 자식 포인터를 가질 수 있는 트리 구조입니다. 검색할 때는 루트 노드부터 시작하여 현재 노드의 키와 비교하면서 범위를 좁혀가며 탐색합니다.
이러한 특성 덕분에 인덱스는 데이터베이스 성능 최적화에 매우 중요한 역할을 합니다. 인덱스가 있으면 단순히 검색 속도만 빨라지는 것이 아니라, 정렬이나 그룹화와 같은 연산에도 큰 이점을 줍니다.
하지만 인덱스는 데이터를 조회할 때는 유리하지만, 삽입이나 수정, 삭제가 이루어질 때는 인덱스도 함께 갱신되어야 합니다. 따라서 쓰기 연산이 많은 테이블에 불필요하게 많은 인덱스를 추가하면 오히려 전체 성능이 떨어질 수 있습니다.
결국 인덱스는 모든 컬럼에 적용하는 것 보다는 자주 검색되는 컬럼, 조인에 활용되는 외래키 컬럼, 정렬이나 범위 검색에 자주 쓰이는 컬럼에 인덱스를 설정하면 큰 효과를 얻을 수 있습니다. 반대로 쓰기 위주의 로그 테이블처럼 빠른 저장이 중요한 경우에는 최소한의 인덱스만 두는 것이 좋습니다.
'Interview Question' 카테고리의 다른 글
[Interview Question] 트랜잭션의 ACID 특성을 설명해보세요. (0) | 2025.09.02 |
---|---|
[Interview Question] INNER JOIN, LEFT JOIN 차이는 무엇인가요? (0) | 2025.09.02 |
[Interview Question] 정규화와 비정규화의 차이를 설명해주세요. (0) | 2025.09.01 |
[Interview Question] RDBMS와 NoSQL의 차이점은 무엇인가요? (0) | 2025.09.01 |
[Interview Question] Spring에서 트랜잭션 관리 방법은 무엇인가요? (0) | 2025.08.31 |