책 한눈에 보기
항목 | 내용 |
---|---|
도서명 | SQL 레벨업 |
저자 | 미크 |
키워드 | SQL 최적화, DBMS 아키텍처, 실행 계획, 인덱스, 서브쿼리, 데이터 모델링 |
1. DBMS 아키텍처
- 다양한 DB 제품이 존재하지만, RDBMS의 기본 구조는 동일하며 데이터 영구 저장이라는 목적을 공유함.
- 쿼리 평가 엔진은 SQL을 분석해 실행 계획을 세우며, DBMS 성능의 핵심 모듈.
- 버퍼 매니저는 전용 메모리 영역인 버퍼를 관리해 디스크 I/O를 최소화함.
- 디스크 용량 매니저는 데이터를 어디에, 어떻게 저장할지를 제어함.
- DBMS 메모리는 데이터 캐시와 로그 버퍼로 나뉨.
- 실행 계획은
EXPLAIN EXTENDED
SQL 구문으로 확인 가능.
2. SQL 기초
- 뷰(View)는 SELECT 구문을 데이터베이스 안에 저장해 재사용성을 높임.
- CASE식은 절차지향 언어의 switch와 비슷하게 조건 분기 가능.
- WHERE은 개별 레코드 조건, HAVING은 집합 조건 지정에 사용.
- UNION 사용 시 조건 분기를 잘못 설계하면 성능 저하 발생 가능.
3. SQL의 조건 분기
- UNION 기반 조건 분기는 여러 SELECT가 실행되어 I/O 비용 증가 위험이 있음.
- 반면, 여러 테이블 검색 결과를 합쳐야 하는 경우에는 UNION이 효과적인 도구가 될 수 있음.
4. 집약과 자르기
- 집약 함수: COUNT, SUM, AVG, MAX, MIN 등.
- 자르기(Slicing)는 테이블을 부분 집합으로 분할하는 작업.
GROUP BY
구로 생성된 집합을 수학적으로는 파티션(Partition)이라 부름.- GROUP BY는 단순 필드뿐만 아니라 복잡한 수식 기준으로도 사용 가능.
5. 결합
- INNER JOIN은 결합 조건 필수.
- 외부 결합(LEFT/RIGHT/FULL)은 기준 테이블 방향에 따라 차이가 있음.
- 자기 결합(Self Join)은 같은 테이블에 별칭을 붙여 다른 테이블처럼 활용.
- Hash 알고리즘은 균일한 값 분포를 보장하여 JOIN 효율성을 높임.
6. 서브쿼리
- 서브쿼리는 뷰와 유사하지만 일시적이며 실행 중에만 존재.
- 성능 문제는 데이터를 물리적으로 저장하지 않는 특성에서 발생.
- 윈도우 함수로 대체하면 성능이 개선될 가능성이 높음.
- 사용 시에는 결합 대상 레코드 수를 줄여 성능 최적화 필요.
7. 갱신과 데이터 모델
- 갱신 SQL은 강력하지만 실제로는 검색 SQL만큼 주목받지 못함.
- 데이터 모델 차원에서 설계하면 성능 문제를 근본적으로 해결 가능.
- 에릭 레이먼드:
"현명한 데이터 구조 + 단순한 코드"가 "잘못된 데이터 구조 + 복잡한 코드"보다 낫다.
- 데이터 모델이 테이블 구조를 결정하며, 그 반대는 아님.
8. 인덱스 사용
- 가장 널리 쓰이는 인덱스 구조는 B-tree.
- 성능 지표 중 하나인 클러스터링 팩터는 데이터 물리적 밀집도를 나타냄.
- 인덱스 선택 기준:
- 카디널리티 높음 → 값이 다양할수록 인덱스 효율적.
- 선택률 낮음 → 조건으로 적은 레코드만 추출될수록 성능이 좋음.
- 인덱스가 적용되지 않는 경우:
- LIKE 중간·후방 일치
- 인덱스 필드 연산
- IS NULL, NOT IN, <> 등 부정 조건
- 대체 방법: UI 설계 조정, 데이터 마트 활용 등.
💡 Quick Insight
- DBMS 핵심: 쿼리 엔진·버퍼 매니저·실행 계획
- WHERE vs HAVING: 레코드 조건 ↔ 집합 조건
- UNION: 성능 리스크, 필요 시 신중히 사용
- GROUP BY: 데이터 파티션 생성
- JOIN: 내부/외부/자기 결합, Hash 알고리즘 활용
- 서브쿼리: 편리하지만 성능 리스크 존재
- 갱신 SQL: 데이터 모델링이 근본 해법
- 인덱스: 카디널리티↑, 선택률↓일수록 효과적
마무리 생각
SQL 최적화는 단순히 구문을 줄이는 문제가 아니라, 데이터 모델링·인덱스·실행 계획까지 아우르는 종합적인 작업임을 알 수 있었다.
쿼리 효율화를 넘어 데이터 구조를 올바르게 설계하는 것이야말로 성능 최적화의 핵심이다.
'도서리뷰 > 전공' 카테고리의 다른 글
컴퓨터 네트워크의 동장 방식 이해 — 『TCP/IP 쉽게, 더 쉽게』 (0) | 2025.09.07 |
---|---|
SQL은 무엇인가 — 『SQL 첫걸음』 (0) | 2025.09.07 |
네트워크 초보 입문 — 『Network 쉽게, 더 쉽게』 (0) | 2025.09.07 |
JSP 게시판, 웹 사이트 개발 및 파일 업로드 — 『JSP 게시판 만들기, 웹 사이트 개발하기, 파일 업로드』 (0) | 2025.09.07 |
자바스크립트의 동작원리와 구성 — 『JavaScript+jQuery 정복』 (0) | 2025.09.07 |