책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 데이터베이스 프로그래밍 > SQL
· ISBN : 9788996817932
· 쪽수 : 391쪽
목차
서문
Chapter 01
SQL 튜닝의 시작은?
Chapter 02
서브쿼리와 성능 문제 이해하기
●서브쿼리에 대한 기본 내용 이해하기 7
-서브쿼리란 7
-서브쿼리의 사용 패턴에 대해 알아보자 8
●서브쿼리 동작방식 이해하기 12
-FILTER 동작방식 12
-조인 동작방식 19
-서브쿼리 동작방식을 제어하는 힌트들 27
●서브쿼리를 활용한 SQL 성능개선 38
-비효율적인 MINUS 대신 NOT EXISTS를 사용하자 38
-조인 대신 서브쿼리를 활용하자 45
-WHERE절의 서브쿼리를 조인으로 변경하자 48
Chapter 03
스칼라 서브쿼리의 이해와 효율적인 SQL 작성하기
●스칼라 서브쿼리의 특성 이해하기 55
-최대 결과 건수만큼 반복적으로 수행된다 55
-추출되는 데이터는 항상 1건만 유효하다 56
-데이터가 추출되지 않아도 된다 59
●스칼라 서브쿼리와 조인의 이해 및 활용하기 60
-스칼라 서브쿼리는 최종 결과 만큼 수행하자 60
-스칼라 서브쿼리와 조인의 관계로 보는 SQL 성능 문제 69
Chapter 04
WITH절 이해와 효율적인 SQL 작성하기
●WITH절 동작방식 이해하기 82
-MATERIALIZE 동작방식 82
-INLINE VIEW 동작방식 86
●SQL 성능 개선을 위한 WITH절 활용하기 89
-데이터 중복 액세스 제거하기 89
-VIEW PREDICATING 성능 문제 제거하기 90
-계층 쿼리의 데이터 처리 최소화 하기 95
●WITH절을 사용할 때 주의해야 할 점은? 98
-동시성이 높은 경우 MATERIALIZE 동작방식은 피하자 98
-추출 건수가 많은 경우 WITH절은 피하자 98
-WITH절 선언 부분은 SQL의 가장 앞에 위치시키자 99
-WITH절에 동작방식 힌트를 추가하자 100
Chapter 05
MERGE 구문 이해와 효율적인 SQL 작성하기
●MERGE 구문의 구성요소 알기 107
-INTO 절 107
-USING 절 108
-ON 절 108
●MERGE 구문으로 처리되는 데이터 이해하기 109
-MERGE_T1 테이블에 몇 건 UPDATE 될까? 109
-MERGE_T1 테이블에 몇 건 DELETE 될까? 111
-MERGE_T1 테이블에 몇 건 INSERT 될까? 112
●MERGE 구문 작성 시 발생할 수 있는 에러와 해결방법 알아보기 113
-TARGET TABLE과 SOURCE TABLE의 조인은 1:1이어야 한다 114
-UPDATE 컬럼은 ON절에 사용할 수 없다 116
●MERGE 구문은 다양한 형태의 DML을 지원한다 117
●MERGE 구문을 성능 문제에 활용하자 119
Chapter 06
FUNCTION 수행과 SQL 성능 문제 이해하기
●FUNCTION 기본내용들 이해하기 123
-USER DEFINED FUNCTION의 의미 123
-USER DEFINED FUNCTION의 특징과 장점 123
-USER DEFINED FUNCTION의 종류와 사용법 125
●FUNCTION 동작방식 이해하기 133
-SELECT절에 사용하는 FUNCTION의 동작방식 133
-WHERE절에 사용하는 FUNCTION의 동작방식 140
●Function 수행과 SQL 성능 문제 152
-Function은 최종 추출 결과만큼만 수행하자 152
-Function이 스칼라 서브쿼리에서 수행하도록 변경하자 158
-Function을 호출하는 값의 패턴을 분석하자 163
-Select절에 사용된 Function을 조인으로 변경하자 166
-Where절의 Function을 Select절로 옮기자 168
Chapter 07
DECODE & CASE WHEN 이해 및 조건 문 처리하기
●DECODE 181
-구문 181
-구문에 대한 상세 설명 182
-DECODE와 성능 이슈 185
●CASE 206
-구문 207
-구문에 대한 상세 설명 207
-단순 CASE와 탐색 CASE 사용법 208
-예제를 통한 CASE의 사용법 209
Chapter 08
NULL 처리 구문 이해와 효율적인 SQL 작성하기
●NULL 처리 함수 이해하기 220
-NVL () 220
-NVL2 () 222
●NVL 활용하기 224
-실행계획 분리하기 224
-IS NULL 조회 개선하기 227
●그룹 함수(COUNT, SUM, MAX, MIN)와 NVL 처리 228
●NULLABLE 컬럼 사용에 의한 비효율 COUNT 함수 처리 233
●IS NULL 조회에 대한 개선방법 찾기 238
-NVL 처리와 FUNCTION BASED INDEX 생성 241
-컬럼 속성 변경(DEFAULT 설정)과 NULL 데이터 업데이트 242
-컬럼 추가 및 인덱스 생성 후 WHERE절 변경 243
●IS NOT NULL 조회에 대한 개선방법 찾기 245
-다양한 IS NOT NULL 처리와 SQL 성능 문제 245
-조인 처리 시 IS NOT NULL 활용하기 249
●' '(BLANK)와 NULL 데이터 처리하기 251
-' '(BLANK) 데이터가 NULL일까? 251
-TRIM & NVL 처리 252
-' '와 NULL 데이터 처리 관련 성능 문제 252
Chapter 09
날짜 데이터 관련 함수 조회하기
●데이터 타입 간 날짜 데이터 제어하기 257
-DATE 조회 - 에러가 발생하는 경우 257
-DATE 조회 - 정상 조회 되는 경우 258
-잘못된 날짜 연산들 259
●일자, 시간, 분, 초 계산하기 260
●날짜와 관련된 유용한 함수들 263
-TO_DATE & TO_TIMESTAMP & TO_CHAR(datetime) 263
-ADD_MONTHS 269
-MONTHS_BETWEEN 270
-LAST_DAY 271
-NEXT_DAY 271
-ROUND 273
-TRUNC 274
-EXTRACT 275
Chapter 10
임의의 데이터를 활용한 효율적인 SQL 작성하기
●CONNECT BY LEVEL로 데이터 추출하기 281
-임의의 숫자 만들기 281
-임의의 날짜 만들기 282
●CONNECT BY LEVEL 활용하기 283
-데이터 변환 시 CONNECT BY LEVEL 사용하기 283
-데이터 중복 조회 제거하기 285
-인덱스 처리 일량이 많은 경우 288
Chapter 11
컬럼 변형에 의한 SQL 성능 문제 이해하기
●조회 컬럼과 변수의 데이터 타입을 맞추자 303
●컬럼에 불필요한 ORACLE 제공함수를 사용하지 말자 310
-부적절하게 FUNCTION을 컬럼에 사용하는 경우 310
-컬럼 변형으로 인해 인덱스의 MIN/MAX를 활용하지 못하는 경우 312
-파티션 키 컬럼 변형은 모든 파티션을 읽는다 315
Chapter 12
조회 패턴에 맞게 SQL 실행계획 분기하기
●많은 조회 패턴을 가진 SQL은 하나의 SQL이 아니다 323
●SQL의 조회 패턴 별 실행계획을 분기하자 326
-여러 조건을 가진 SQL의 실행계획 분기하기 326
-변수 값의 범위에 따라 SQL을 분리하자 330
Chapter 13
ROWNUM 이해와 관련 SQL 성능 문제 이해하기
●ROWNUM 데이터를 먼저 추출한 이후 조회하자 343
●ORDER BY와 ROWNUM을 같은 위치에 두지 말자 345
●ROWNUM=1은 ROWNUM<=1로 사용하자 347
●INDEX_DESC와 ROWNUM<=1을 함께 사용하지 말자 349
●ROWNUM<=1은 항상 빠르지 않다 353
●인라인 뷰에 ROWNUM을 추가할 때는 주의하자 357
Chapter 14
화면 PAGINATION 처리할 때 이것은 지키자
●ROWNUM 처리를 잘하자 365
●인덱스 컬럼 순서와 ORDER BY절 순서를 맞추자 371
●PLAN에 나타나는 오퍼레이션 중 COUNT에 속지 말자 372
●NESTED LOOPS JOIN을 사용하자 374
NESTED LOOPS JOIN에 비효율이 많지 않은 경우 효과적이다 374
기본적인 형태의 PAGINATION을 익히자 375
Index 391