로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

개발자를 위한 인덱스 생성과 SQL 작성 노하우

   
지은이 이병국   |   출판사 글봄크리에이티브  |   발행일 2018년 06월 15일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 32,000원28,800원 10%
마일리지 1% 320원
발행일 2018-06-15
ISBN 8996560081 | 9788996560081
기타정보 국내서 | 404쪽 | 일반
예상출고일 금일 가능 (근무일기준)
배송비 무료배송
   
데이터베이스관리
종합지수 0p
   
 

- 개발 현장에서 바로 통하는 인덱스 생성 및 쿼리 작성 노하우 제시
- 관리를 쉽게 하고 개발 생산성을 끌어올리는 쿼리 작성의 정석 ‘공정쿼리’
- 이론과 개념을 뛰어넘는 경험과 검증 기반의 DB 실무 노하우 전달
- 기초 모델링 개념을 녹여낸 실무 중심의 SQLP, SQLD 준비서
- DBGuide.net 최고 인기 연재를 책으로
- 비유와 이야기로 풀어내는 명쾌한 접근, 쿼리작성 문제로 재미있게 공부
- 개발자와 DB 전문가가 함께 볼 수 있는 DB 실무 가이드 북


개발자 입장에서 DB 인덱스 처리와 쿼리 작성 노하우를 명쾌하게 알려주는 책.
데이터와 데이터베이스(DB)의 중요성이 어느 때보다 강조되고 있다. 얼마 전까지만 해도 DB에 대한 깊은 이해는 튜너나 DBA의 영역처럼 여겨졌다. 하지만 데이터 시대의 도래와 함께 상황은 달라졌다. 개발자도 DB에 대한 폭넓은 이해가 요구되고 있다. 이 추세를 반영하듯 DB 및 SQL 튜닝 소개서들이 속속 출간되고 있다.

개발자 입장에서 DB 인덱스 처리와 쿼리 작성 노하우를 제대로 풀어낸, 볼 만한 책 한 권이 나왔다. 『개발자를 위한 인덱스 생성과 SQL 작성 노하우』가 바로 그 주인공. 이 책은 데이터 지식 포털인 DBgude.net에서 3년 이상 연재되면서 큰 인기를 모았던 내용을 재구성한 것이다.



[추천의 글]

개발자의 가치를 높일 수 있는 책
이 책의 장점은 쉽게 쓰였다는 점입니다. DB에 익숙하지 않은 개발자에게 ‘강추하는’ 이유입니다. 이 책의 진정한 장점은 ‘인덱스 생성도’입니다. 인덱스 생성도를 따라 책을 읽어가다 보면 인덱스
를 이해할 수 있게 됩니다. 인덱스는 쿼리를 다루는 개발자가 꼭 알아야 하는 부분입니다. 모델러 입장에서 이 책은 모델링에 대한 기초 지식을 기반으로 쓰여졌다는 점을 높게 평가하고 싶습니다. SQL로 결과만 보여주면 된다는 견지가 아니라 엔터티 설계가 중요하다는 점을 여기저기서 강조하고 있습니다. 이 책이 많은 개발자에게 자신의 가치를 한 단계 높일 수 있는 계기가 될 수 있
기를 바랍니다. (김기창, 데이터 모델러·위즈덤마인드 대표 컨설턴트)


비유 방식으로 어려운 개념을 쉽게 이해하도록 도와줘
쉽고 새롭게 알려주는 책. 경험이 많지 않은 개발자들이 늘 혼란스러워하는 인덱스 개념을 ‘인덱스 생성도’라는 그림으로 쉽게 소개한 점이 눈길을 끈다. 생활 속 경험을 토대로한 비유 방식의 접근법은 너무나도 쉽게 공감이 되어 어려운 개념을 쉽게 이해하도록 도와준다. 알고 있던 내용도 명확하게 정리해주는 느낌을 준다. 이러한 생활밀착형 비유법은 이 책만이 가진 독특한 장점이다. 개발자는 물론 DB 전문가에게도 충분히 도움이 될 만한 책이다. (기민용: gurubee.net 운영진으로 ‘마농’이라는 닉네임으로 활동)



‘장보기를 잘하는 개발자가 쿼리도 잘 짠다’
『개발자를 위한 인덱스 생성과 SQL 작성 노하우』는 철저하게 개발자 중심으로 접근한 튜닝 가이드다. DB 전문가 대상의 이론이나 개념 중심의 튜닝에서 벗어나 코딩 시 헷갈리는 인덱스 지점을 어떻게 잡고, 실행계획(plan) 적용 방법을 그림과 비유로 흥미롭게 소개한다.

저자는 책에서 ‘개발자의 관심은 DB 이론이나 개념을 아는 데 있지 않다. 인덱스 포인트를 파악해 쿼리를 짜면 DB 속도는 물론 개발 생산성과 관리까지 한 번에 잡을 수 있다’고 소개하고 있다. 또한 ‘인덱스 포인트를 파악해 상식 선에서 접근해도 개발자 측면에서 SQL 튜닝은 충분히 잘할 수 있다’고 강조한다.

먼저 이 책의 인덱스 소개 방식이 눈길을 끈다. ‘인덱스 생성도’라는 그림이 그것이다. 개발자가 쿼리 작성 시 고민하게 되는 인덱스 생성 포인트를 설명할 때 계속 제시된다. 인덱스 생성도를 그려보면, 복잡한 쿼리 작성 시에도 인덱스 포인트를 정확하게 집어낼 수 있다. ‘인덱스 생성도’는 필자가 개발자 시절에 유독 헷갈리기만 했던 경험에서 나온 것이다. 개발자 입장에서 인덱스는 B의 핵심 개념임에도 어려워하는 사람이 많아서, 필자 스스로 이해했던 과정을 그림으로 도출한 것이 인덱스 생성도입니다.

쉽게 만나기 어려웠던 쿼리 작성 경험과 노하우도 눈에 띈다. 인덱스 생성 지점을 파악해 테이블 접근 순서(실행계획)에 따라 누구나 금방 알아보도록 작성한 쿼리를 이 책은 ‘공정쿼리’라고 소개한다. 반면 작성자 본인만 알 수 있는 쿼리를 ‘나쁜 쿼리’라고 한다. 나쁜 쿼리는 개발 생산성 저하뿐 아니라, 나중에 성능 및 관리 문제까지 야기할 수 있다.
서문 ‘쉬운 것이 바른 것’
이 책의 특징과 구성

1회: PCTFREE, PCTUSED
물탱크 구조와 오라클의 블록 옵션 비교하기
- 약방의 감초: PCTFREE와 PCTUSED 블록 옵션
- PCTFREE 10%와 PCTUSED 40% 설정값 바꿔본 사람 있나요?
- 둘의 합이 100에 가까워서는 안 된다
- 맥가이버 병사의 순발력이 문제를 해결하다
- 고정관념에서 벗어나기를 바라며
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 1


2회: 인덱스
이산가족 찾기로 배우는 DB의 분류 원리
- KBS 이산가족 찾기 생방송
- 대형 할인매장의 전략
- ‘도둑은 분류를 좋아한다’
- 개미 세계의 분류
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 2

3회: 인덱스
인덱스는 분류, 물리적 분류와 논리적 분류
- 물리적 분류에서 논리적 분류로
- 거실의 책장 분류
- 라디오 방송국의 음반 분류
- 분류 대상과 분류 정보의 분리
- 물리적 분류와 논리적 분류
- 인덱스는 논리적 분류
- 지식은 그것을 필요로 하는 사람의 몫
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 3

4회: 인덱스
인덱스에 대한 오해와 진실
결혼인가, 화혼인가!
결합인덱스의 컬럼 순서 결정방법
추천하는 결합인덱스의 컬럼 순서
원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 4


5회: 인덱스
쉬운 것이 바른 것! 인덱스 컬럼 선정 기준
- 바른 것이 쉽다
- 성능 제고를 위해 우선 고려할 것, 인덱스
- 인덱스 대상 후보컬럼 선정 기준
- 분포도가 좋은 컬럼인가?
- 인덱스보다 풀스캔이 유리할 때
- 논리적 분포도로 판단할 때의 위험
- 특별한 물고기
- ORDER BY 절 컬럼도 인덱스 후보일 수 있다
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 5


6회: 인덱스
분류 본능을 활용하라 ‘인덱스 끝장리뷰’
- 인덱스 수는 적정해야 한다
- 인덱스는 위치정보와 순서정보로 구성됐다
- 조건절에 사용하는 인덱스와 조인절에 사용하는 인덱스
- 인덱스 생성/삭제 시 고려사항
- 결합인덱스의 컬럼 순서 결정방법
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 6


7회: 인덱스
누구도 알려주지 않았던 ‘오라클 인덱스 생성도’의 비밀•72
- 어머니의 심부름: 두부가게와 쌀가게
- 오라클의 RBO 방식과 CBO 방식
- 인덱스 생성도의 기본 규칙
- 인덱스 생성도에 대한 이해
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 7


8회: 쿼리
누구도 알려주지 않았던 SQL 작성의 규칙과 방법•89
- 공정무역과 공정여행, 공정쿼리
- 공정쿼리
- 나막사 주부의 심부름 메모지
- 나계획 주부의 심부름 메모지
- 공정쿼리, 반드시 이렇게 작성하라!
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 8


9화: 쿼리
퀴리 최적화와 튜닝을 한 번에! 공정쿼리 작성법•103
- 배낭여행 스마트앱 만들기
- 오라클 CBO 방식과 통계정보
- 테이블 접근 순서 규칙 1: 진입형 테이블을 결정하라(사원테이블 선택 접근 시)
- 테이블 접근 순서 규칙 2: OUTER JOIN보다 INNER JOIN을 우선하라
- 테이블 접근 순서 규칙 3: 연결 확장형보다는 연결 축소형 테이블을 우선하라
- 인덱스 생성도와 공정쿼리 재작성하기
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 9


10화: 쿼리
만능 쿼리와 한방 쿼리, DB는 집합적 사고로 접근해야
- 나쁜 사람이 세상을 발전시킨다?
- 심각한 만능 쿼리
- 핵심 조건절의 수만큼 쿼리를 분리해야
- 한방 쿼리에 대한 이해
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 10

11회: 튜닝, 옵티마이저
오라클 옵티마이저, CBO와 RBO 이해하기
- 어머니의 심부름: 두부가게와 쌀가게
- CBO 방식과 RBO 방식
- CBO 방식: 옵티마이저와 통계정보, 실행계획
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 11


12회: 쿼리, 쉬어가는 이야기
재미있는 DB 이야기 ‘60 갑자와 쿼리’
- 10천간과 12지지•127 | 60갑자에서 규칙 찾기
- 10천간과 12지지 그리고 오라클 쿼리
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 12


13회: 조인
그림으로 풀어보는 오라클의 조인 방식
- 택시 같은 Nested Loop Join
- 짝꿍 정해주기와 같은 Sort Merge Join
- 성씨 구역처럼 구분하는 Hash Join
- 오라클 조인 방식의 특징 비교
- 조인 방식과 조인 순서 결정하기
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 13


14회: 실행계획
쿼리를 작성한 후에는 실행계획을 확인하라•143
- 실행계획을 알고 있어야 하는 이유
- 실행계획을 늘 확인하자
- 오라클 옵티마이저의 실행계획과 개발자의 실행계획
- 바인드 변수와 하드 파싱
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 14


15회: 튜닝, 힌트절
놓치면 후회할 오라클 힌트절 7가지
- 힌트절로 옵티마이저의 실수 차단
- 접근 방법을 결정하는 힌트절: USE_NL과 USE_HASH
- 자원 사용을 결정하는 힌트절: INDEX, FULL, PARALLEL
- 배치 튜닝의 마법사 같은 힌트절 삼총사: USE_HASH, FULL, PARALLEL
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 15


16회: NULL
개발자들의 영원한 숙제 NULL 이야기•173
- 이길 수 있을 때 공격하라
- 쉬우면서 어려운 존재, NUL
- 개발자를 힘들게 하는 NULL
- NULL 회피 전략
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 16


17회: 튜닝, 힌트절
개발자를 위한 유용한 선물, GATHER_PLAN_STATISTICS 힌트절
- 호미, 무시할 수 없는 그 존재감
- GATHER_PLAN_STATISTICS, 무시할 수 없는 엄청난 존재감
- 튜닝을 위한 최고의 힌트절
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 17


18회: 튜닝
놓치기 아까운 오라클의 유용한 기능들
- COMMIT 이전의 상태로 되돌리는 기능 FLASHBACK
- 오라클에서 스케줄 작업 사용법
- SAMPLE 혹은 SAMPLE BLOCK을 이용한 SAMPLE SCAN
- 종을 횡으로 구현하는 함수 WM_CONCAT
- 횡을 종으로 구현하는 함수 REGEXP_SUBSTR
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 18


19회: DICTIONARY
오라클 딕셔너리 기반의 DB 툴 프로그램 ‘FreeSQL’
- 씨줄과 날줄•208 | 오라클 딕셔너리•209 오라클 딕셔너리를 이용한 DB 툴 개발
- 새로운 DB 프로그램 개발의 주인공은 바로 나
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 19


20회: DICTIONARY, 쉬어가는 이야기
이제는 말할 수 있다, 주식 자동매매 프로그램(상)
- 프로그래머의 길에서 벗어나다
- IMF! 구조조정! 주식! 새로운 길을 찾다
- 주식 자동매매 프로그램을 개발하다


21회: DICTIONARY, 쉬어가는 이야기
이제는 말할 수 있다, 주식 자동매매 프로그램(하)
- 공시·뉴스 수집 프로그램
- 공시·뉴스 분석 프로그램
- 주식 자동매매 프로그램
- 테이블 구성에 대한 이해
- API를 알면 보이는 것들


22회: 에러 메시지
개발자들이 자주 접하는 오라클 에러 메시지
- 김기사와 빅데이터
- ‘조선시대에도 빅데이터가 있었다’
- 오라클 에러 메시지 톱10
- 오라클 에러 메시지를 마무리하
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 22


23회: 함수, 쉬어가는 이야기
사라진 날짜를 찾아라, 오라클에서 달력 다루기
- 곶감 만들기에 도전하다
- 동양과 서양의 달력
- 사라진 날짜를 찾아라
- 그레고리력과 오라클 DB
- 그레고리력 규칙을 이용해 요일 구하기
- 달력 팝업 창 쿼리 만들기
- 스토리를 마무리하며
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 23


24회: 랜덤 함수
오라클 랜덤 함수와 사용자 정의 함수
- 오라클 랜덤 패키지 DBMS_RANDOM
- 문자열을 역순으로 리턴하는 REVERSE 함수
- 사용자 정의 함수를 만들어 쓰기
- 사용자 정의 함수 ISNUMERIC
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 24


25회: 공정쿼리
그림으로 배우는 ‘공정쿼리와 인덱스 생성도’
- 오라클 CBO 방식과 통계정보
- 장바구니 = 무엇을 + 어떻게
- 공정쿼리 = 무엇을 + 어떻게
- 인덱스 생성도에 대한 이해
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 25


26회: 오라클 파라미터
디폴트 세팅의 함정과 오라클 파라미터
- 디폴트 세팅의 영향
- 디폴트 세팅의 함정
- ‘사용자 설정은 의지의 설정’
- 오라클 파라미터의 이해
- 오라클의 주요 파라미터
- 무모한 도전과 경험 사이에서
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 26


27회: 쿼리, 쉬어가는 이야기
재미있는 DB 이야기, SQL로 구현하는 마방진
- 마방진은 현재 진행형
- 3차 마방진
- 4차 마방진
- 4차 슈퍼 마방진
- 3차 입체 마방진
- 기타 각종 마방진
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 27

28회: 블록
오라클 운반 최소 단위, 블록
- 오라클 블록에 대한 이해
- 오라클 블록의 크기와 OLTP & OLAP
- 오라클 블록과 Row Chaining & Row Migration
- 오라클 블록과 성능의 연관성
- 원리를 이해하고 논리로 풀어가는 쉬어가는 스토리 DB 문제 28


29회: 인공지능, 쉬어가는 이야기
데이터가 촉발한 인공지능과 그 새로운 도전
- 컴퓨터와 인간의 대결?
- 구글의 인공지능 알파고
- 인공지능·머신러닝·딥러닝
- 머신러닝
- 딥러닝


30회: 쉬어가는 이야기
DB 엔지니어의 계산 방식과 기계의 계산 방식
- ‘옥뮤다’ 택배 실종사건•320 두 번째 버스를 타자
- 인간의 계산 방식 vs. 기계의 계산 방식


31회: 튜닝, 페이징
페이징 처리에 대한 이해
- 프로그램 페이징 처리와 서버 페이징 처리
- 전체 범위 페이징 처리와 부분 범위 페이징 처리
- MySQL의 LIMIT와 오라클의 ROW_NUMBER
- 최고의 페이징 처리와 최적의 페이징 처리

32회: 튜닝, 쿼리
보기 좋은 떡이 먹기도 좋다, 좋은 쿼리 좋은 성능
- 무질서와 질서
- 옵티마이저가 동일한 쿼리로 인식하도록 작성
- 표현 방식이 다르면 다른 SQL 문으로 인식


33회: 튜닝, 테이블 분할
성능 개선을 위한 테이블 수직분할과 수평분할
- 테이블 분할을 알아야 하는 이유
- I/O 성능 개선을 위한 수직분할
- 처리 성능 개선을 위한 수평분할
- 수직분할과 수평분할의 결정 기준


34회: 튜닝, 채번
성능 제고를 위한 채번 이해와 방식별 장단점 비교
- 채번에 대한 이해
- 채번 테이블을 이용하는 방식
- 테이블에서 최댓값을 이용하는 방식
- 시퀀스를 이용하는 방식
- 채번 방식에 대한 장단점 비교


35회: 튜닝
개발자를 위한 튜닝실전 1편: 생명체처럼 다뤄라
- 인덱스, 필요한 데이터를 빨리 찾기
- GROUOP BY 절 사용과 성능 이슈

36회: 튜닝
개발자를 위한 튜닝실전 2편: 줄이고 또 줄여라
- 줄이고 줄이고 또 줄이자
- 홍길동을 찾아라

37회: 튜닝
개발자를 위한 튜닝실전 3편: 인덱스를 사용하지 않을 때 대처법•361
- 인덱스를 사용하지 않는 경우 1: 컬럼 변형 시
- 인덱스를 사용하지 않는 경우 2: 타입 변형 시
- 인덱스를 사용하지 않는 경우 3: NULL 사용 시
- 인덱스를 사용하지 않는 경우 4: 부정형 사용 시
- 인덱스를 사용하지 않는 경우 5: LIKE 사용 시
- 인덱스를 사용하지 않는 경우 6: 인덱스 경합 발생 시
- 인덱스를 회피하는 방법


스토리 DB 문제 풀이와 정답
찾아보기
[이병국]

동아제약 전산실에서 개발 업무를 시작으로 프리랜서 개발자로 독립해 활동하던 중 DB와 인연을 맺게 됐다. 삼성생명 전산 운영팀에서 쿼리 성능을 개선하는 DB 튜닝과 IOA(Input-Output Analysis) 업무를 담당했다. 이때 사내 개발자 대상의 DB 접근 노하우와 SQL 튜닝 교육을 수차례에 걸쳐 하면서 실력을 인정 받았다. 이 경험을 바탕으로 데이터 지식 포털인 DBGuide.net에 「개발자를 위한 오라클 이야기」를 연재해 좋은 반응을 얻었다.


감수

[김기창]

위즈덤마인드 대표 컨설턴트. 데이터 모델링과 DA(Data Architecture) 컨설팅을 하고 있다. 풍부한 실전 경험을 바탕으로 데이터 모델링을 직접 수행하면서 DA 컨설팅을 하는 것이 장점이다. 저서로는 『데이터베이스 활용을 위한 SQL Server 2000』, 『관계형 데이터 모델링 프리미엄 가이드』, 『관계형 데이터 모델링 노트』가 있다.


등록된 서평이 없습니다.
데이터아키텍처 전문가 가이드 [ 2013 Edition ]...
한국데이터진흥원
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
데이터아키텍처 자격검정 실전문제 [ 2013 Edition ]...
한국데이터진흥원
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
 
전체평균(0)
회원평점   회원서평수 0
이메일주소수집거부