
구매문의 및 도서상담은 031-944-3966(매장)으로 문의해주세요.
매장전집은 전화 혹은 매장방문만 구입 가능합니다.

지은이 : 유일환
서경대학교에서 컴퓨터공학을 전공하고, 2001년부터 개발자로 커리어를 시작했다. 2005년부터 2017년까지는 중국 삼성전자 판매 법인에서 DA(Data Architecture) 업무를 맡아, 판매·유통·데이터 분석 등 다양한 영역의 데이터베이스를 설계하고 수많은 배치 프로그램과 핵심 SQL을 개발·튜닝했다. 2018년부터는 국내 여러 기업에서 다양한 DBMS의 SQL 튜닝과 데이터 아키텍처 관련 프로젝트를 수행하고 있다. 이전 저서로는 <SQL BOOSTER>와 <평생 필요한 데이터 분석>, <SQL STARTER>가 있으며 대한민국이 데이터 강국이 되기를 바라는 마음으로, 지금도 꾸준히 기술을 전파하고 있다.
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. 매뉴얼 커밋과 베큠
도서 DB 제공 - 알라딘 인터넷서점 (www.aladin.co.kr)