Skip to content

HI-dle/Kind_SQL_Tuning_study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

122 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kind_SQL_Tuning_study

친절한 SQL 튜닝 책 스터디를 위한 레포지토리입니다.

SQL 튜닝 목차

1장. SQL 처리 과정과 I/O

1.1 SQL 파싱과 최적화

  • 1.1.1 구조적, 집합적, 선언적 질의 언어
  • 1.1.2 SQL 최적화
  • 1.1.3 SQL 옵티마이저
  • 1.1.4 실행계획과 비용
  • 1.1.5 옵티마이저 힌트

1.2 SQL 공유 및 재사용

  • 1.2.1 소프트 파싱 vs. 하드 파싱
  • 1.2.2 바인드 변수의 중요성

1.3 데이터 저장 구조 및 I/O 메커니즘

  • 1.3.1 SQL이 느린 이유
  • 1.3.2 데이터베이스 저장 구조
  • 1.3.3 블록 단위 I/O
  • 1.3.4 시퀀셜 액세스 vs. 랜덤 액세스
  • 1.3.5 논리적 I/O vs. 물리적 I/O
  • 1.3.6 Single Block I/O vs. Multiblock I/O
  • 1.3.7 Table Full Scan vs. Index Range Scan
  • 1.3.8 캐시 탐색 메커니즘

2장. 인덱스 기본

2.1 인덱스 구조 및 탐색

  • 2.1.1 미리 보는 인덱스 튜닝
  • 2.1.2 인덱스 구조
  • 2.1.3 인덱스 수직적 탐색
  • 2.1.4 인덱스 수평적 탐색
  • 2.1.5 결합 인덱스 구조와 탐색

2.2 인덱스 기본 사용법

  • 2.2.1 인덱스를 사용한다는 것
  • 2.2.2 인덱스를 Range Scan 할 수 없는 이유
  • 2.2.3 더 중요한 인덱스 사용 조건
  • 2.2.4 인덱스를 이용한 소트 연산 생략
  • 2.2.5 ORDER BY 절에서 컬럼 가공
  • 2.2.6 SELECT-LIST에서 컬럼 가공
  • 2.2.7 자동 형변환

2.3 인덱스 확장기능 사용법

  • 2.3.1 Index Range Scan
  • 2.3.2 Index Full Scan
  • 2.3.3 Index Unique Scan
  • 2.3.4 Index Skip Scan
  • 2.3.5 Index Fast Full Scan
  • 2.3.6 Index Range Scan Descending

3장. 인덱스 튜닝

3.1 테이블 액세스 최소화

  • 3.1.1 테이블 랜덤 액세스
  • 3.1.2 인덱스 클러스터링 팩터
  • 3.1.3 인덱스 손익분기점
  • 3.1.4 인덱스 컬럼 추가
  • 3.1.5 인덱스만 읽고 처리
  • 3.1.6 인덱스 구조 테이블
  • 3.1.7 클러스터 테이블

3.2 부분범위 처리 활용

  • 3.2.1 부분범위 처리
  • 3.2.2 부분범위 처리 구현
  • 3.2.3 OLTP 환경에서 부분범위 처리 성능 개선 원리

3.3 인덱스 스캔 효율화

  • 3.3.1 인덱스 탐색
  • 3.3.2 인덱스 스캔 효율성
  • 3.3.3 액세스 조건과 필터 조건
  • 3.3.4 비교 연산자 종류와 컬럼 순서에 따른 군집성
  • 3.3.5 인덱스 선행 컬럼이 등치(=) 조건이 아닐 때의 비효율
  • 3.3.6 BETWEEN을 IN-List로 전환
  • 3.3.7 Index Skip Scan 활용
  • 3.3.8 IN 조건은 ‘=’인가
  • 3.3.9 BETWEEN과 LIKE 스캔 범위 비교
  • 3.3.10 범위검색 조건 남용 시 비효율
  • 3.3.11 다양한 옵션 조건 처리 방식의 장단점 비교
  • 3.3.12 함수 호출 부하 해소를 위한 인덱스 구성

3.4 인덱스 설계

  • 3.4.1 인덱스 설계가 어려운 이유
  • 3.4.2 두 가지 핵심 선택 기준
  • 3.4.3 스캔 효율성 이외 판단 기준
  • 3.4.4 전략적 설계
  • 3.4.5 소트 연산 생략을 위한 컬럼 추가
  • 3.4.6 결합 인덱스 선택도
  • 3.4.7 중복 인덱스 제거
  • 3.4.8 인덱스 설계도 작성

4장. 조인 튜닝

4.1 NL 조인 (Nested Loop Join)

  • 4.1.1 기본 메커니즘
  • 4.1.2 실행계획 제어
  • 4.1.3 수행 과정 분석
  • 4.1.4 튜닝 포인트
  • 4.1.5 특징 요약
  • 4.1.6 튜닝 실습
  • 4.1.7 확장 메커니즘

4.2 소트 머지 조인 (Sort Merge Join)

  • 4.2.1 SGA vs. PGA
  • 4.2.2 기본 메커니즘
  • 4.2.3 빠른 이유
  • 4.2.4 주 용도
  • 4.2.5 제어 방법
  • 4.2.6 특징 요약

4.3 해시 조인 (Hash Join)

  • 4.3.1 기본 메커니즘
  • 4.3.2 빠른 이유
  • 4.3.3 대용량 Build Input 처리
  • 4.3.4 실행계획 제어
  • 4.3.5 조인 메소드 선택 기준

4.4 서브쿼리 조인

  • 4.4.1 서브쿼리 변환 필요성
  • 4.4.2 서브쿼리와 조인
  • 4.4.3 뷰(View)와 조인
  • 4.4.4 스칼라 서브쿼리 조인

5장. 소트 튜닝

5.1 소트 연산 이해

  • 5.1.1 소트 수행 과정
  • 5.1.2 소트 오퍼레이션

5.2 소트 발생 방지 SQL 작성

  • 5.2.1 Union vs. Union All
  • 5.2.2 Exists 활용

5.3 인덱스를 이용한 소트 생략

  • 5.3.1 Sort Order By 생략
  • 5.3.2 Top N 쿼리
  • 5.3.3 최소값/최대값 구하기
  • 5.3.4 이력 조회
  • 5.3.5 Sort Group By 생략

5.4 Sort Area 절약 SQL 작성

  • 5.4.1 소트 데이터 줄이기
  • 5.4.2 Top N 쿼리의 소트 부하 경감 원리
  • 5.4.3 Top N 쿼리 부하
  • 5.4.4 분석 함수 Top N 소트

6장. DML 튜닝

6.1 기본 DML 튜닝

  • 6.1.1 DML 성능 영향 요소
  • 6.1.2 데이터베이스 Call과 성능
  • 6.1.3 Array Processing 활용
  • 6.1.4 인덱스 및 제약 해제를 통한 대량 DML 튜닝
  • 6.1.5 수정 가능 조인 뷰
  • 6.1.6 MERGE 문 활용

6.2 Direct Path I/O 활용

  • 6.2.1 Direct Path I/O
  • 6.2.2 Direct Path Insert
  • 6.2.3 병렬 DML

6.3 파티션 활용 DML 튜닝

  • 6.3.1 테이블 파티션
  • 6.3.2 인덱스 파티션
  • 6.3.3 파티션 기반 대량 UPDATE 튜닝
  • 6.3.4 파티션 기반 대량 DELETE 튜닝
  • 6.3.5 파티션 기반 대량 INSERT 튜닝

6.4 Lock과 트랜잭션 동시성 제어

  • 6.4.1 오라클 Lock
  • 6.4.2 트랜잭션 동시성 제어
  • 6.4.3 채번 방식에 따른 INSERT 성능 비교

7장. SQL 옵티마이저

7.1 통계정보와 비용 계산 원리

  • 7.1.1 선택도와 카디널리티
  • 7.1.2 통계정보
  • 7.1.3 비용 계산 원리

7.2 옵티마이저 이해

  • 7.2.1 옵티마이저 종류
  • 7.2.2 옵티마이저 모드
  • 7.2.3 옵티마이저에 영향 주는 요소
  • 7.2.4 옵티마이저의 한계
  • 7.2.5 개발자의 역할
  • 7.2.6 튜닝 전문가 공부 방법

부록. SQL 분석 도구

  1. 실행계획 확인
  2. AutoTrace
  3. SQL 트레이스
  4. DBMS_XPLAN 패키지
  5. 실시간 SQL 모니터링
  6. V$SQL

📜 진행방식

  • 일정 : 2025. 09. 18(목)
    • 매주 월/목(첫 주만 수/토 로 진행합니다.) 오후 2시, 총 8주(16회)
  • 인원: 6명

읽기

  • 알아서!
  • 읽은 내용 중 질문 혹은 중요하다고 생각되는 부분을 해당하는 장의 Issue 에 Comment 를 바로 남겨주세요.

발표

  • 목요일까지 각자 읽은 후 요약해 발표를 진행합니다.
  • 발표 내용: 읽은 부분으로 진행합니다.
  • 발표 담당자 지정: 미리 적절히 나누어 사다리 타기로 진행합니다.
  • 발표자는 본인 파트에 해당하는 Issue 에 달린 Comment 관련 내용도 함께 준비합니다.

📚 Github Convention

발표 자료

  • 파일명(파일 위치 포함)은 아래와 같이 해주세요.
    0X장/[0X장]_{제목}{(부가옵션)_0X-0X_소제목자유}_{이름}.md
    

issue

  • 아래와 같이 제목을 작성해주세요.
    [0X장]_{제목}
    
  • Issue Comment 는 제일 첫 줄에 관련 페이지 위치를 작성해주세요.
    p.123 n문단
    ~문장이 이해가 안 됩니다.
    

commit message

  • 아래와 같이 작성해주세요.
    [#이슈번호]{파일이름(.md 제외)}
    

👨‍👩‍👧‍👦 회고

  • 1주일 동안 책을 읽으면서 느낀점, 발표를 보고 느낀점 들을 자유롭게 이야기 해주시면 됩니다.
  • 자유롭게 각자 하고 싶은 말을 하면 되니 부담 가지실 필요는 없습니다.

팀원 정보

강혜주 남정길 박지은 최진영 한지훈 황하온

About

친절한 SQL 튜닝 책 스터디를 위한 레포지토리입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors