더 많은 도움을 드리기 위해

열심히 포스팅 중입니다!


지나가다 📢 광고 한 번 눌러주시면

더 좋은 글로 보답하겠습니다. 🥰

기술 면접 준비

인덱스를 추가하면 조회가 빨라질까? - 기술 면접 준비

평비 - Giveloper 2025. 5. 1. 23:29

 

 

면접관: A 프로젝트를 하실 때, 인덱스를 추가해서 조회 성능을 높이셨는데요.
인덱스를 추가하면 조회가 왜 빨라질까요?

 

 

🍼 왕초보

인덱스는 책의 목차처럼, 필요한 데이터를 빠르게 찾을 수 있게 도와주는 기능입니다.

인덱스가 없으면 책을 처음부터 끝까지 다 뒤져야 하지만, 인덱스(목차)가 있으면 곧바로 원하는 곳으로 갈 수 있기 때문에 조회가 빨라집니다.

 

 

🐣 초보

데이터베이스는 인덱스를 별도로 저장해두고, 검색할 때 테이블 전체를 보지 않고, 이 인덱스를 먼저 봅니다.
그래서 원하는 데이터 위치를 바로 찾아가기 때문에 빨라집니다.

가능한 추가 질문
1. 인덱스는 어떤 구조로 저장되어 있나요?
2. 오, 그러면 인덱스를 사용하면 반드시 좋을까요? 단점은 없을까요?

 

 

🥉 하수

인덱스는 단순히 모아둔 게 아니라, 정렬된 구조입니다. 그래서 필요한 데이터를 이진 탐색처럼 빠르게 찾을 수 있습니다.
인덱스는 주로, B+ Tree 구조인데 O(log n) 시간 복잡도로 조회됩니다.

가능한 추가 질문
1. 정렬된 구조라면, ORDER BY할 때도 인덱스를 활용하나요?
2. 인덱스는 왜 B tree 구조 말고 B+ tree 구조가 주로 사용될까요?

 

 

🥈 중수

인덱스를 사용해 조회한다는 것은 인덱스 스캔테이블 액세스, 두 단계로 조회가 최적화됩니다.

인덱스는 결국 "이 값은 테이블의 어디에 있어"라는 주소를 저장합니다.
그래서 인덱스에서 빠르게 이 주소 키를 찾은 다음, 테이블에서는 정확히 필요한 데이터만 조회하러 가기 때문에 빨라집니다.

가능한 추가 질문
1. 인덱스 리프 노드에 저장되는 주소는 어떤 값인가요?
2. 인덱스 스캔 후 항상 테이블 액세스가 이뤄지나요?

 

 

🥇 고수

보통, 인덱스를 사용하면 디스크 I/O(입출력) 횟수가 줄어들기 때문에 조회가 빨라집니다.
만약 인덱스가 없으면 디스크를 전부 읽어야 하는데, 인덱스가 있으면 일부 블록만 읽어도 됩니다.

특히, B+ Tree 인덱스는 높이가 낮아서 수백만 건 중에서도 3~4번 정도 디스크 접근만으로 데이터를 찾을 수 있습니다.

가능한 추가 질문
1. 디스크 I/O를 줄인다는 건 구체적으로 어떤 상황에서 이득이 있나요?
2. Random I/O와 Sequential I/O 관점에서 인덱스가 주는 장점은 뭔가요?
3. 디스크 캐시와 버퍼 풀은 인덱스 사용에 어떤 영향을 주나요?

 

 

🧙 고인물

인덱스를 사용한다고 반드시 조회 성능이 좋아지는 것은 아닙니다.

조회 쿼리를 실행할 때는, DB의 옵티마이저(Optimizer)가 인덱스 스캔을 할지, 풀 스캔 할지를 결정합니다.
옵티마이저는 인덱스의 선택성(Selectivity), 통계 정보(Statistics), 비용 모델(Cost Model)을 보고 판단합니다.

즉, 인덱스가 있어도 항상 사용되는 건 아니고, "인덱스를 타는 게 비용이 더 적을 때"만 인덱스를 사용합니다.

가능한 추가 질문
1. 옵티마이저가 인덱스를 사용하지 않는 대표적인 상황은 어떤 경우인가요?
2. 옵티마이저 힌트를 활용해서 인덱스를 강제로 사용할 수 있나요?
3. 통계 정보가 오래되면 어떤 문제가 발생하나요?

 

 

 

👏

자, 이렇게 인덱스를 사용하면 조회 속도가 빨라지는가? 에 대한 답변, 추가 질문에 대해서 다뤄봤습니다!

여러분들은 왕초보 ~ 고인물 중에서 어떤 위치에 속하시나요? 참고로 저도 고인물은 아니에요! 😂

한 중수 정도 되려나요...!? 그 이상 질문도 답변은 가능한데, 추가질문까지는 어렵네요! 🤣

 

평비의 이 평범한 글이 여러분에게 비범한 도움이 되셨으면 좋겠습니다 👍