책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 데이터베이스 프로그래밍 > MySQL
· ISBN : 9791191941135
· 쪽수 : 460쪽
· 출판일 : 2026-03-01
책 소개
이 원고에서 특히 인상적인 점은 저자의 집필 태도입니다. 저자는 ‘그럴듯하지만 틀린 설명’을 가장 경계하며, 문장 하나가 오해를 만들지 않는지, 예제가 과장되거나 빈틈이 없는지, 설명의 순서가 독자의 사고 흐름과 맞는지까지 끝까지 점검했습니다. 같은 내용을 여러 번 다시 풀어 쓰고, 표현을 깎고, 예제를 재검증하는 과정이 누적되며, 이 책은 ‘알려주는 책’이 아니라 검증 가능한 기준을 남기는 책이 되었습니다.
결과적으로 이 책은 특정 기법을 외우게 하기보다, 성능 문제를 마주했을 때 무엇을 먼저 확인하고, 무엇을 의심하며, 어떤 선택을 피해야 하는지를 스스로 정리할 수 있게 합니다. 제대로 배우고, 오래 써먹을 수 있는 SQL 성능의 기본기를 찾는 독자에게 가장 현실적인 안내서가 될 것입니다.
목차
CHAPTER 01 성능을 위한 기본 지식
1-1. SQL 튜닝이란
1-1-1. SQL 튜닝 사례
1-2. 실습환경 구성하기
1-2-1. ERD
1-2-2. 실습환경 구성하기
1-3. SQL 튜닝의 주요 요소
1-3-1. Index
1-3-2. 비효율 SQL 변경
1-3-3. 힌트 사용
1-3-4. SQL 성능에 영향을 주는 기타 요소
1-4. SQL 처리 과정
1-4-1. Parsing
1-4-2. Optimization
1-4-3. Execution
1-4-4. Fetch
1-5. 옵티마이저와 실행계획
1-5-1. 옵티마이저
1-5-2. 실행계획
1-5-3. 옵티마이저와 SQL 튜닝
1-5-4. 비용 기반 옵티마이저
1-5-5. 옵티마이저가 말하길, 나도 힘들다.
1-6. 통계
1-6-1. 테이블 통계(pg_class)
1-6-2. 컬럼 통계(pg_stats)
1-6-3. 통계는 언제 만들어지는가?
1-7. I/O
1-7-1. I/O
1-7-2. 블록
1-7-3. 데이터 블록과 인덱스 블록
1-7-4. 메모리 vs. 디스크
1-7-5. 메모리 I/O vs. 디스크 I/O
1-7-6. Shared Buffer
CHAPTER 02 실행계획
2-1. 실행계획
2-1-1. EXPLAIN
2-1-2. 오퍼레이션
2-1-3. 실행계획 트리
2-1-4. Child First
2-1-5. 힌트의 기본 사용법
2-2. EXPLAIN 옵션
2-2-1. EXPLAIN ANALYZE
2-2-2. 추가 옵션
2-2-3. BUFFERS
2-2-4. actual time 해석
CHAPTER 03 인덱스
3-1. 인덱스 개념 잡기
3-1-1. 인덱스란?
3-1-2. Seq Scan
3-1-3. 인덱스로 Seq Scan 비효율 개선하기
3-1-4. 인덱스 개념 잡기
3-2. 테이블과 인덱스 구조
3-2-1. 테이블 구조
3-2-2. 인덱스 구조
3-2-3. 트리 구조의 데이터 탐색
3-2-4. 인덱스 구조는 어떻게 만들어지는가?
3-2-5. 인덱스의 실제 크기
3-2-6. 인덱스 높이와 균형
3-3. 테이블에서 데이터를 찾아내는 방법
3-3-1. 테이블 전체를 스캔해 찾기
3-3-2. 인덱스를 활용해 찾기
3-3-3. 레코드의 물리적 주소를 활용해 찾기
3-3-4. 방법에 따른 실제 I/O 검증해 보기
3-4. 인덱스 스캔 심화
3-4-1. 인덱스 시각화
3-4-2. 인덱스 스캔 3단계
3-4-3. 인덱스 처리 조건과 테이블 처리 조건
3-4-4. 테이블 접근이 없는 인덱스 스캔
3-4-5. 테이블 접근과 성능
3-4-6. 어떤 인덱스를 사용할까?
3-4-7. 인덱스 분류
CHAPTER 04 PostgreSQL의 인덱스 스캔
4-1. Index Scan
4-1-1. 동등 조건
4-1-2. 범위 조건
4-1-3. Filter와 Rows Removed by Filter
4-2. Index Only Scan
4-2-1. Index Only Scan
4-2-2. Index Only Scan vs. Index Scan
4-2-3. Index Only Scan의 Heap Fetches
4-3. Bitmap Scan
4-3-1. Bitmap Index Scan & Bitmap Heap Scan
4-3-2. Bitmap Scan vs. Index Scan
4-4. Index Full Scan
4-4-1. Index Full Scan
4-4-2. Index Full Scan vs. Index Only Scan
CHAPTER 05 인덱스와 성능
5-1. 어느 컬럼에 인덱스를 만들 것인가?
5-1-1. ord_st
5-1-2. shop_id
5-1-3. pkup_dtm
5-1-4. 어느 컬럼에 인덱스를 만들 것인가?
5-2. 복합 인덱스
5-2-1. 단일 인덱스 vs. 복합 인덱스
5-2-2. 복합 인덱스
5-2-3. 복합 인덱스 컬럼 순서와 리프 블록
5-2-4. 복합 인덱스 검색키 결정 규칙
5-2-5. Index Filter
5-2-6. 복합 인덱스의 선두 조건 누락
5-2-7. 복합 인덱스 설계하기
5-3. 생각보다 까다로운 인덱스
5-3-1. 검색키와 스톱키가 없는 SQL
5-3-2. 주의가 필요한 날짜 컬럼
5-3-3. 언제까지 인덱스를 사용할 것인가?
5-3-4. 너무 많은 인덱스의 위험성
5-3-5. 중복된 인덱스
5-3-6. Prepared Statements와 Generic Plan
5-3-7. LIKE 패턴과 인덱스
5-4. 특별한 인덱스 기법
5-4-1. 커버링 인덱스
5-4-2. 부분 인덱스
5-4-3. CLUSTER
5-4-4. Bitmap Scan의 효율성
5-4-5. Function-based index
5-4-6. BitmapAnd
5-4-7. Index Skip Scan
CHAPTER 06 정렬과 집계
6-1. 정렬 부하
6-1-1. external merge
6-1-2. work mem과 quicksort
6-2. 정렬과 인덱스
6-2-1. No Sort
6-2-2. Backward Scan
6-2-3. LIMIT n
6-2-4. Sort 제거를 위한 인덱스
6-2-5. Sort 제거보다 WHERE 절에 집중
6-2-6. Incremental Sort
6-2-7. ORDER BY를 빼먹지 말자.
6-2-8. 정렬을 피할 수 없다.
6-3. 집계
6-3-1. GroupAggregate와 HashAggregate
6-3-2. GROUP BY 컬럼 최소화
6-3-3. LIMIT MIN/MAX
6-3-4. 변형된 컬럼의 MIN/MAX
6-3-5. LIMIT MIN/MAX를 위한 인덱스
CHAPTER 07 조인의 내부 처리 방식
7-1. NL 조인 이해하기
7-1-1. 조인의 내부 처리 방식
7-1-2. NL 조인
7-1-3. 드라이빙과 드리븐
7-1-4. NL 조인의 실행계획
7-2. 머지 조인 이해하기
7-2-1. 머지 조인
7-2-2. 머지 조인의 실행계획
7-3. 해시 조인 이해하기
7-3-1. 해시 조인
7-3-2. 빌드 입력과 프로브 입력
7-3-3. 해시 조인의 실행계획
7-4. 조인 힌트
7-4-1. 조인 알고리즘과 데이터 집합의 역할
7-4-2. 조인 힌트 사용법
7-4-3. Leading 힌트
7-4-4. 여러 테이블의 조인 힌트
CHAPTER 08 조인과 성능
8-1. NL 조인과 성능
8-1-1. NL 조인의 비효율
8-1-2. 드리븐 테이블의 인덱스
8-1-3. 드리븐 테이블의 필터 조건
8-1-4. 드라이빙 테이블의 인덱스
8-1-5. 드라이빙 집합 선택
8-1-6. 드리븐 테이블의 인덱스 컬럼 순서
8-1-7. 무조건 작은 집합을 드라이빙 할 것인가?
8-1-8. 여러 테이블의 NL 조인
8-1-9. 조인 조건의 Index Cond 확인
8-1-10. NL 조인의 인덱스 전략
8-2. 머지 조인과 성능
8-2-1. 머지 조인의 비효율
8-2-2. 머지 조인을 위한 인덱스
8-2-3. 머지 조인의 한계
8-3. 해시 조인과 성능
8-3-1. 대용량 조인에 탁월한 해시 조인
8-3-2. 해시 조인을 위한 인덱스
8-3-3. 빌드 입력 선택
8-3-4. 프로브 입력 최적화
8-3-5. 테이블 원래 크기만으로 조인 방식을 결정하면 안 된다.
8-3-6. 해시 조인은 동등 조인 조건이 필수
8-3-7. 조인 컬럼에 인덱스가 없다면 해시 조인
8-4. 조인과 성능
8-4-1. 인덱스 힌트만으로 조인 알고리즘 선택하기
8-4-2. 상황에 따른 인덱스 선택
8-4-3. 코드명 조회 - 스칼라 서브쿼리 vs. 조인
8-4-4. 조인 횟수를 줄이자
8-4-5. 조인을 추가하자
8-4-6. 조인 튜닝 전략
CHAPTER 09 트랜잭션과 모니터링
9-1. 트랜잭션
9-1-1. 트랜잭션
9-1-2. 오토 커밋과 명시적 트랜잭션
9-1-3. xid
9-1-4. LOCK
9-2. 트랜잭션 테스트와 모니터링
9-2-1. 테스트 준비
9-2-2. pg_locks
9-2-3. 대기(wait) 상태
9-2-4. pg_stat_activity
9-2-5. 사라진 500원
9-2-6. SELECT FOR UPDATE
9-2-7. CREATE INDEX CONCURRENTLY
CHAPTER 10 VACUUM
10-1. VACUUM을 왜 하는가?
10-1-1. Dead Tuple
10-1-2. Freeze
10-2. VACUUM
10-2-1. Autovacuum
10-2-2. 수동 VACUUM
10-3. VACUUM과 성능
10-3-1. UPDATE와 용량 변화
10-3-2. VACUUM과 성능
10-3-3. 데드 튜플 최소화 전략
10-3-4. 배치와 데드 튜플
10-3-5. 매뉴얼 커밋과 베큠
저자소개
책속에서





















