알고리즘 & 문제 해결 패턴/Java & SQL 면접 질문
[Java & SQL 면접 질문] SQL 성능 최적화 관련 면접 질문과 답변 정리
Jinsapp
2025. 3. 17. 21:47
[SQL] SQL 성능 최적화 관련 면접 질문과 답변 정리
1. SQL 성능 최적화란?
SQL 성능 최적화는 데이터베이스의
**조회 속도를 높이고, 부하를 줄이는 기술**을 의미합니다.
인덱스 활용, 조인 최적화, 실행 계획 분석 등이 핵심 개념으로 다뤄집니다.
2. SQL 성능 최적화 면접 질문
질문 | 예상 답변 |
---|---|
1. 인덱스(INDEX)란 무엇이며, 언제 사용해야 하나요? | 인덱스는 **검색 성능을 향상시키는 데이터 구조**입니다. WHERE 절에서 자주 사용되는 컬럼이나 JOIN 시 매칭되는 컬럼에 적용하면 성능이 개선됩니다. 하지만 **INSERT, UPDATE, DELETE 성능이 저하될 수 있으므로 적절한 컬럼에만 적용**해야 합니다. |
2. 인덱스가 효율적이지 않은 경우는? | - 데이터가 자주 변경되는 컬럼 (예: 로그 테이블) - SELECT 문에서 **함수(예: UPPER(name))를 적용하면 인덱스를 사용하지 못함** - 작은 테이블(테이블 크기가 작다면 전체 스캔이 더 빠를 수도 있음) |
3. SQL 실행 계획(EXPLAIN PLAN)이란? | 실행 계획은 **SQL이 어떻게 실행될지 예측하는 계획**입니다. 이를 통해 INDEX가 사용되는지, FULL SCAN이 발생하는지 등을 분석할 수 있습니다. |
4. 조인(JOIN) 성능을 최적화하는 방법은? | - **인덱스 적용:** JOIN에 사용되는 컬럼에 INDEX 추가 - **드라이빙 테이블 설정:** 작은 테이블을 먼저 조회하여 불필요한 데이터를 줄임 - **필요한 컬럼만 조회:** SELECT * 대신 필요한 컬럼만 조회 |
5. 뷰(VIEW)와 머티리얼라이즈드 뷰(MATERIALIZED VIEW)의 차이? | - VIEW는 **실시간 데이터 조회**, MATERIALIZED VIEW는 **쿼리 결과를 저장하여 성능 최적화** - MATERIALIZED VIEW는 주기적으로 **REFRESH 필요** |
6. 트랜잭션(TRANSACTION)이란? | 트랜잭션은 **데이터베이스에서 하나의 작업 단위로 실행되는 명령어 그룹**입니다. 트랜잭션은 **ACID (Atomicity, Consistency, Isolation, Durability)** 원칙을 따릅니다. |
7. 트랜잭션 격리 수준(TRANSACTION ISOLATION LEVEL)이란? | 트랜잭션 간의 **동시성 문제를 해결하기 위한 설정**입니다. 대표적인 격리 수준: - **READ UNCOMMITTED:** 변경 중인 데이터 읽기 가능 → Dirty Read 발생 - **READ COMMITTED:** COMMIT된 데이터만 읽기 가능 - **REPEATABLE READ:** 트랜잭션이 시작될 때 읽은 데이터는 변경되지 않음 - **SERIALIZABLE:** 가장 엄격한 격리 수준, 동시성을 최소화 |
8. Deadlock(교착 상태)이란? | 두 개 이상의 트랜잭션이 서로 상대방의 자원을 기다리면서 영원히 종료되지 않는 상태입니다. 해결 방법: - 트랜잭션 수행 순서를 일관되게 유지 - 타임아웃 설정 |
9. 파티셔닝(PARTITIONING)이란? | 큰 테이블을 논리적으로 여러 개의 작은 테이블로 나누는 기술입니다. **쿼리 성능을 최적화**하고, **데이터 관리가 용이**해집니다. |
10. 데이터 정규화와 비정규화(Normalization vs Denormalization)란? | - **정규화:** 데이터 중복을 최소화하고, 무결성을 유지하기 위해 테이블을 분할 - **비정규화:** 성능 최적화를 위해 일부 데이터 중복을 허용하여 조회 속도를 높임 |
📌 정리
- ✔ **SQL 성능 최적화 면접에서는 인덱스, 조인 최적화, 실행 계획, 트랜잭션 개념이 자주 출제됨**
- ✔ **뷰와 머티리얼라이즈드 뷰, 파티셔닝 개념도 중요**
- ✔ **트랜잭션 격리 수준과 교착 상태 해결 방법 숙지 필요**
🔗 다른 SQL 면접 질문도 함께 확인해보세요!