시스템 설계 · 중급
특정 테이블의 쿼리 성능을 최적화하기 위해 인덱스를 설계해야 합니다. 어떤 인덱스 종류(예: B-tree, Hash, 클러스터링, 논클러스터링)를 고려해야 하며, 복합 인덱스(Composite Index)는 언제 유용하게 사용될 수 있는지 설명해 주세요.
힌트 · 쿼리 패턴, 데이터 분포, 카디널리티를 고려하여 인덱스 타입을 선택해야 합니다. 복합 인덱스는 여러 컬럼을 함께 검색하거나 정렬할 때 유용하며, 인덱스 순서가 중요합니다.
B-Tree복합 인덱스선택도쿼리 패턴클러스터형 인덱스
모범답안
쿼리 성능 최적화를 위한 인덱스 설계는 쿼리 패턴, 데이터 분포, 그리고 카디널리티를 종합적으로 고려해야 합니다.
가장 일반적인 인덱스 타입은 B-Tree 인덱스입니다. 대부분의 경우에 적합하며, 범위 검색이나 정렬에도 효율적입니다. Hash 인덱스는 특정 값의 존재 여부를 빠르게 확인하는 데 유용하지만, 범위 검색에는 적합하지 않습니다.
클러스터형 인덱스는 테이블 당 하나만 존재할 수 있으며, 데이터 자체를 인덱스 키 순서대로 정렬합니다. 따라서, 전체 데이터를 자주 조회하는 경우에 유리합니다. 논클러스터형 인덱스는 데이터 위치를 가리키는 포인터를 저장하며, 여러 개를 생성할 수 있습니다.
복합 인덱스는 여러 컬럼을 함께 묶어 인덱스를 생성하는 것으로, 여러 컬럼을 동시에 검색하거나 정렬할 때 성능을 향상시킬 수 있습니다. 예를 들어, WHERE category = 'A' AND price < 10000 쿼리의 경우, (category, price) 순서로 복합 인덱스를 생성하면 좋습니다. 이때, 인덱스 컬럼 순서가 쿼리 조건과 일치해야 효과를 볼 수 있습니다. 선택도가 높은 컬럼을 먼저 인덱싱하는 것이 일반적입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 데이터베이스 설계 면접 질문
- 데이터베이스 인덱스(Index)는 무엇이며, 어떤 상황에서 주로 사용하고 어떤 이점을 제공하나요?
- "한 명의 고객은 여러 개의 주문을 할 수 있다"는 비즈니스 요구사항을 관계형 데이터베이스로 설계할 때, 어떤 테이블과 컬럼을 사용하여 1:N(일대다) 관계를 표현할 수 있을까요?
- 실무에서 데이터베이스를 설계할 때, 정규화(Normalization)와 비정규화(Denormalization)를 어떤 기준으로 적용해야 하며, 성능상의 이유로 비정규화를 고려해야 하는 상황과 그 단점은 무엇인가요?
- 회원 관리 시스템을 설계할 때, '이메일 주소'와 '전화번호'를 저장하기 위한 데이터 타입을 선택해야 합니다. 적절한 데이터 타입과 길이를 선택하는 기준은 무엇이며, 잘못된 선택이 성능 및 저장 공간에 미치는 영향은 무엇인가요?
- 외래 키(Foreign Key) 제약조건을 설정할 때, 'ON DELETE CASCADE', 'ON DELETE SET NULL', 'ON DELETE RESTRICT' 등의 옵션 중 어떤 경우에 각 옵션을 선택해야 하는지 구체적인 시나리오를 들어 설명해 주세요.
- 뷰(View)와 물질화된 뷰(Materialized View)의 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 적절한가요? 특히 물질화된 뷰가 대용량 데이터 환경에서 쿼리 성능 최적화에 어떻게 기여할 수 있는지 설명해 주세요.