복잡한 분석 쿼리(예: 다중 조건 조인, 부분 문자열 검색, 공간 데이터 검색)의 성능을 최적화하기 위한 고급 인덱싱 전략을 설명하시오. 특히, 함수 기반 인덱스(Function-Based Index), 부분 인덱스(Partial Index), 커버링 인덱스(Covering Index), 공간 인덱스(Spatial Index) 등의 개념과 실제 적용 사례, 그리고 각 인덱스의 장단점 및 주의사항에 대해 논하시오.
힌트 · 쿼리 패턴을 분석하여 적절한 인덱스 유형을 선택하는 것이 중요합니다. 인덱스의 저장 공간, 쓰기 성능 오버헤드를 고려하며, 특정 쿼리 유형에 최적화된 인덱스를 설계해야 합니다.
모범답안
복잡한 분석 쿼리 성능 최적화를 위한 고급 인덱싱 전략에 대해 말씀드리겠습니다.
먼저, 함수 기반 인덱스는 특정 함수나 연산의 결과값을 인덱싱하여, WHERE절에서 해당 함수를 사용하는 쿼리의 성능을 향상시킵니다. 예를 들어, UPPER(column_name)을 인덱싱하면 대소문자를 구분하지 않는 검색이 빨라집니다. 하지만 데이터 변경 시 인덱스 갱신 비용이 발생합니다.
부분 인덱스는 테이블의 일부 데이터에 대해서만 인덱스를 생성합니다. 특정 조건을 만족하는 데이터에 대한 쿼리 성능을 높일 수 있습니다. 예를 들어, status = 'active'인 데이터에 대해서만 인덱스를 생성하면, 활성 사용자 검색 속도가 빨라집니다. 저장 공간을 절약할 수 있지만, 조건에 맞지 않는 쿼리에는 효과가 없습니다.
커버링 인덱스는 쿼리에 필요한 모든 컬럼을 포함하는 인덱스입니다. 테이블에 접근하지 않고 인덱스만으로 쿼리 결과를 반환할 수 있어 매우 빠릅니다. 하지만 인덱스 크기가 커지고, 데이터 변경 시 오버헤드가 증가합니다.
공간 인덱스는 공간 데이터를 효율적으로 검색하기 위한 인덱스입니다. 예를 들어, 특정 위치 주변의 상점을 찾는 쿼리에 유용합니다. R-tree 등의 자료구조를 사용하며, 공간 데이터 타입에 특화되어 있습니다.
이러한 인덱스들은 쿼리 패턴과 데이터 특성을 고려하여 적절히 선택해야 합니다. 쿼리 옵티마이저가 인덱스를 잘 활용하도록 통계 정보를 최신으로 유지하는 것도 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 데이터베이스 설계 면접 질문
- 마이크로서비스 아키텍처 환경에서 각 서비스가 독립적인 데이터베이스를 소유하도록 설계할 때 발생할 수 있는 데이터 일관성 및 분산 트랜잭션 문제를 해결하기 위한 데이터베이스 설계 패턴 및 전략(예: Saga 패턴, CQRS, Event Sourcing)을 설명하고, 각 패턴의 장단점과 적용 시나리오를 구체적으로 제시하시오.
- 서비스 운영 중에 데이터베이스 스키마를 변경해야 하는 상황(예: 컬럼 추가/삭제, 타입 변경, 테이블 분리/병합)이 발생했을 때, 무중단 배포(Zero-downtime deployment)를 지원하면서 데이터 정합성을 유지하기 위한 효과적인 스키마 마이그레이션 전략 및 롤백 방안을 설계 관점에서 설명하시오.
- 이벤트 소싱(Event Sourcing)과 CQRS(Command Query Responsibility Segregation) 패턴을 적용하여 시스템을 설계할 경우, 데이터베이스 구조와 운영 방식에 어떤 근본적인 변화가 발생하는지 설명하고, 전통적인 CRUD 기반의 데이터베이스 설계와 비교하여 장단점 및 적합한 사용 사례를 제시하시오.