• Real MySQL
  • 개발자와 DBA를 위한

  • 이성욱 지음

  • 오픈소스 & 웹 시리즈 _ 038, 데이터 & 데이터베이스 시리즈 _ 003
  • ISBN: 9788992939003
  • 45,000원 | 2012년 05월 8일 발행 | 1040쪽



Real MySQL, MySQL의 새로운 발견!

더 이상 MySQL은 커뮤니티나 소셜 네트워크 서비스와 떼어놓을 수 없는 관계에 있다는 것은 누구나 잘 알고 있을 것이다. 하지만 MySQL은 여기서 그치지 않고 빌링이나 결제와 같은 금전적인 처리용으로도 많이 사용되고 있는데, 이는 MySQL의 트랜잭션 처리나 안정성이 오라클과 비교해서 전혀 뒤처지지 않음을 의미한다고 볼 수 있다. 사실 MySQL(InnoDB)의 내부 처리 방식은 오라클의 그것과 거의 다르지 않기 때문에 이는 당연한 결과라고 볼 수 있다.

이 책은 지금까지의 매뉴얼 번역이나 단편적인 지식 수준을 벗어나 저자와 다른 많은 MySQL 전문가의 경험과 노력의 결과를 여러분에게 전해줄 것이다. 또한 이 책에서는 많은 그림과 벤치마크 결과를 함께 수록해 MySQL을 처음 접하는 사용자도 쉽게 이해할 수 있게 구성했다. 이 책을 계기로 지금까지 지니고 있었던 MySQL에 대한 선입견 대신 MySQL의 새로운 면모를 익히고 경험하게 되리라 확신한다.

만약 MySQL을 공부하고 있거나 MySQL을 이용한 서비스 개발이나 운영을 해야 한다면 지금 당장 이 책을 살펴보길 권장한다. 지금까지 알고 있는 것들을 넘어서서 새로운 MySQL을 경험하게 될 것이다.

『Real MySQL』은 기본적인 SQL 문법 소개나 매뉴얼의 번역 수준을 벗어나서 MySQL을 이용하는 애플리케이션 개발이나 운영을 통해 얻은 경험과 지식, 그리고 반드시 알고 있어야 할 주의사항 위주로 내용을 구성했다. 이 책을 처음부터 끝까지 다 읽는다면 더없이 좋겠지만, 필요하거나 관심 있는 내용 위주로 살펴봐도 지금까지 가지고 있었던 많은 고민거리를 해결할 수 있을 것이다.

★ 이 책에서 다루는 내용 ★

  • MySQL 서버의 아키텍처와 MySQL 설치
  • 인덱스의 종류와 구조 및 활용
  • 쿼리의 실행 계획 분석 및 최적화
  • MySQL 서버와 연동하는 프로그램 개발
  • 스토어드 프로그램 개발 및 사용자 변수 활용
  • 데이터 모델링 및 최적의 데이터 타입 선정
  • 개발을 위한 베스트 프랙티스
  • MySQL 서버 응급처치

★ 이 책의 내용이나 MySQL 관련된 질의 응답은 아래의 카페를 참조하자.

이성욱

컴퓨터 과학을 전공하고, 금융권의 CRM/DW 프로젝트의 리더로 참여했으며, 2년여간 DW용 ETL 도구 개발도 추진했다. NHN의 DB팀에서 MySQL DBA로 근무하면서 데이터 모델링과 DB 운영 및 기술 벤치마킹을 수행했으며, 전사 표준화 프로젝트도 진행했다. 저서로는 『PHP 5 웹프로그래밍』이 있고, 『MySQL 성능 최적화』를 공동 번역했다.

 

지은이 글

2010년에 접어들면서 수많은 NoSQL 도구가 대용량 데이터 저장에 최적인 것처럼 온라 인 사이트들을 장식했다. 예전에 오라클 데이터베이스가 그래 왔던 것처럼 말이다. 많 은 사람들이 유행을 좇아 NoSQL을 공부하고 있지만, 안타깝게도 우리가 익숙하게 사 용하고 있는 SNS(Social Networking Service)나 SNG(Social Networking Game) 서 비스에서 대용량의 핵심 데이터가 최적화된 MySQL 데이터베이스에서 관리된다는 사 실을 알고 있는 사람은 많지 않다.

이 책을 저술하고 있는 지금도 NoSQL에 대한 사람들의 관심은 상당한 것 같다. 어떤 사람들은 곧 NoSQL이 RDBMS를 모든 부문에서 대체할 것이라고 생각하기도 한다. 물 론 저자도 HBase와 같은 데이터 저장 소프트웨어에 대해서는 상당한 관심을 두고 있다. 카산드라나 HBase, 그리고 몽고DB와 같은 NoSQL 도구가 최고인 것처럼 언급되곤 했 지만, 그 인기의 이면에는 부족한 관리 도구나 기대 이하의 성능으로 비롯되는 괴로움 들이 있는 것도 사실이다. 그리고 몽고DB나 카산드라는 유명세에 비하면 사용처가 그 다지 많지는 않다. 현재 시점에서 그나마 사람들의 관심을 유지하고 있는 것은 HBase 정도이지 않을까 싶다. HBase를 포함한 NoSQL 도구는 INSERT나 UPDATE와 같은 쓰기 처리가 MySQL에 비해 빠르지만, SELECT와 같은 조회 쿼리는 MySQL 서버만큼 고성능으로 처리하지 못하는 단점이 있다. 지금으로서는 HBase 같은 NoSQL 도구와 MySQL 서버는 그 용도가 나름 명백히 나뉜다고 볼 수 있다. NoSQL 도구의 사용법뿐 아니라 서비스 특성별로 적절한 솔루션을 선정하는 혜안도 필요한 것이다.

오라클이나 MSSQL과 같은 상용 데이터베이스와 비교해도 MySQL 서버의 성능이나 효율성은 전혀 손색이 없다. 예전에는 서비스의 가입자 수나 사용자의 수에 비례해 데 이터의 양이 늘어났지만, 최근에는 소셜 네트워크 관련 기능이 많이 구현되면서 가입자 나 사용자의 몇십 배에서 몇백 배 수준으로 데이터의 양이 늘어나는 경향이 있다. 이처 럼 기하급수적으로 늘어나는 데이터를 값 비싼 기업용 대형 장비와 소프트웨어를 사용 해 관리하기란 거의 불가능한 일이다. 10원을 벌기 위해 100원을 투자할 회사는 없으니 말이다. MySQL 서버는 비용에 대한 부담이 없으며, 다른 상용 데이터베이스 서버와 동 등하거나 더 우월한 성능을 제공하므로 최근의 소셜 네트워크 관련 업무 여건에 너무도 잘 들어맞는다.

  • 01장_소개
    • 1.1 MySQL 소개
    • 1.2 왜 MySQL인가?
    •  
  • 02장_설치와 설정
    • 2.1 MySQL 다운로드
    • 2.2 MySQL 서버 설치
      • 2.2.1 리눅스에 설치
      • 2.2.2 윈도우에 설치(MSI)
    • 2.3 서버 설정
      • 2.3.1 설정 파일의 구성
      • 2.3.2 MySQL 시스템 변수의 특징
      • 2.3.3 글로벌 변수와 세션 변수
      • 2.3.4 동적 변수와 정적 변수
      • 2.3.5 my.cnf 설정 파일
    • 2.4 MySQL 서버의 시작과 종료
      • 2.4.1 시작과 종료
      • 2.4.2 서버 연결 테스트
    • 2.5 MySQL 복제 구축
      • 2.5.1 설정 준비
      • 2.5.2 복제 계정 준비
      • 2.5.3 데이터 복사
      • 2.5.4 복제 시작
    • 2.6 권한 관리
      • 2.6.1 사용자의 식별
      • 2.6.2 권한
    • 2.7 예제 데이터 적재
    • 2.8 전문 검색을 위한 MySQL 설치
      • 2.8.1 MySQL의 내장 전문 검색 엔진
      • 2.8.2 MySQL 5.0 버전의 트리톤 설치
      • 2.8.3 MySQL 5.1 버전의 mGroonga 설치
      • 2.8.5 mGroonga 설치 확인
    •  
  • 03장_아키텍처
    • 3.1 MySQL 아키텍처
      • 3.1.1 MySQL의 전체 구조
      • 3.1.2 MySQL 쓰레딩 구조
      • 3.1.3 메모리 할당 및 사용 구조
      • 3.1.4 플러그-인 스토리지 엔진 모델
      • 3.1.5 쿼리 실행 구조
      • 3.1.6 복제(Replication)
      • 3.1.7 쿼리 캐시
    • 3.2 InnoDB 스토리지 엔진 아키텍처
      • 3.2.1 InnoDB 스토리지 엔진의 특성
      • 3.2.2 InnoDB 버퍼 풀
      • 3.2.3 언두(Undo) 로그
      • 3.2.4 인서트 버퍼(Insert Buffer)
      • 3.2.5 리두(Redo) 로그 및 로그 버퍼
      • 3.2.6 MVCC(Multi Version Concurrency Control)
      • 3.2.7 잠금 없는 일관된 읽기(Non-locking consistent read)
      • 3.2.8 InnoDB와 MyISAM 스토리지 엔진 비교
      • 3.2.9 InnoDB와 MEMORY(HEAP)스토리지 엔진 비교
    • 3.3 MyISAM 스토리지 엔진 아키텍처
      • 3.3.1 키 캐시
      • 3.3.2 운영체제의 캐시 및 버퍼
    • 3.4 MEMORY 스토리지 엔진 아키텍처
      • 3.4.1 주의 사항
      • 3.4.2 MEMORY 스토리지 엔진의 용도
    • 3.5 NDB 클러스터 스토리지 엔진
      • 3.5.1 NDB 클러스터의 특성
      • 3.5.2 NDB 클러스터의 아키텍처
      • 3.5.3 클러스터 간의 복제 구성
      • 3.5.4 NDB 클러스터의 성능
      • 3.5.5 NDB 클러스터의 네트워크 영향
      • 3.5.6 NDB 클러스터의 용도
    • 3.6 TOKUDB 스토리지 엔진
      • 3.6.1 프랙탈 트리(Fractal Tree) 인덱스 지원
      • 3.6.2 대용량 데이터와 빠른 INSERT 처리
      • 3.6.3 트랜잭션 및 잠금 처리
      • 3.6.4 그 이외의 특징
      • 3.6.5 TokuDB의 주 용도
    • 3.7 전문 검색 엔진
      • 3.7.1 트리톤 전문 검색 엔진
      • 3.7.2 mGroonga 전문 검색 엔진(플러그인)
      • 3.7.3 스핑크스 전문 검색 엔진
    • 3.8 MySQL 로그 파일
      • 3.8.1 에러 로그 파일
      • 3.8.2 제너럴 쿼리 로그 파일(제너럴 로그 파일, General log)
      • 3.8.3 슬로우 쿼리 로그
      • 3.8.4 바이너리 로그와 릴레이 로그
    •  
  • 04장_트랜잭션과 잠금
    • 4.1 트랜잭션
      • 4.1.1 MySQL에서의 트랜잭션
      • 4.1.2 주의사항
    • 4.2 MySQL 엔진의 잠금
      • 4.2.1 글로벌 락
      • 4.2.2 테이블 락(TABLE LOCK)
      • 4.2.3 유저 락(USER LOCK)
      • 4.2.4 네임 락
    • 4.3 MyISAM과 MEMORY 스토리지 엔진의 잠금
      • 4.3.1 잠금 획득
      • 4.3.2 잠금 튜닝
      • 4.3.3 테이블 수준의 잠금 확인 및 해제
    • 4.4 InnoDB 스토리지 엔진의 잠금
      • 4.4.1 InnoDB의 잠금 방식
      • 4.4.2 InnoDB의 잠금 종류
      • 4.4.3 인덱스와 잠금
      • 4.4.4 트랜잭션 격리 수준과 잠금
      • 4.4.5 레코드 수준의 잠금 확인 및 해제
    • 4.5 MySQL의 격리 수준
      • 4.5.1 READ UNCOMMITTED
      • 4.5.2 READ COMMITTED
      • 4.5.3 REPEATABLE READ
      • 4.5.4 SERIALIZABLE
      • 4.5.5 REPEATABLE READ 격리 수준과 READ COMMITTED 격리 수준의 성능 비교
    •  
  • 05장_인덱스
    • 5.1 디스크 읽기 방식
      • 5.1.1 저장 매체
      • 5.1.2 디스크 드라이브와 솔리드 스테이트 드라이브
      • 5.1.3 랜덤 I/O와 순차 I/O
    • 5.2 인덱스란?
    • 5.3 B-Tree 인덱스
      • 5.3.1 구조 및 특성
      • 5.3.2 B-Tree 인덱스 키 추가 및 삭제
      • 5.3.3 B-Tree 인덱스 사용에 영향을미치는 요소
      • 5.3.4 B-Tree 인덱스를 통한 데이터 읽기
      • 5.3.5 다중 칼럼(Multi-column) 인덱스
      • 5.3.6 B-Tree 인덱스의 정렬 및 스캔 방향
      • 5.3.7 B-Tree 인덱스의 가용성과 효율성
    • 5.4 해시(Hash) 인덱스
      • 5.4.1 구조 및 특성
      • 5.4.2 해시 인덱스의 가용성 및 효율성
    • 5.5 R-Tree 인덱스
      • 5.5.1 구조 및 특성
      • 5.5.2 R-Tree 인덱스의 용도
    • 5.6 Fractal-Tree 인덱스
      • 5.6.1 Fractal-Tree의 특성
      • 5.6.2 Fractal-Tree의 가용성과 효율성
    • 5.7 전문 검색(Full Text search) 인덱스
      • 5.7.1 인덱스 알고리즘
      • 5.7.2 구분자와 n그램의 차이
      • 5.7.3 전문 검색 인덱스의 가용성
    • 5.8 비트맵 인덱스와 함수 기반 인덱스
    • 5.9 클러스터링 인덱스
      • 5.9.1 클러스터링 인덱스
      • 5.9.2 보조 인덱스(Secondary index)에 미치는 영향
      • 5.9.3 클러스터 인덱스의 장점과 단점
      • 5.9.4 클러스터 테이블 사용시 주의사항
    • 5.10 유니크 인덱스
      • 5.10.1 유니크 인덱스와 일반 보조 인덱스의 비교
      • 5.10.2 유니크 인덱스 사용 시 주의사항
    • 5.11 외래키
      • 5.11.1 자식 테이블의 변경이 대기하는 경우
      • 5.11.2 부모 테이블의 변경 작업이 대기하는 경우
    • 5.12 기타 주의사항
    •  
  • 06장_실행 계획
    • 6.1 개요
      • 6.1.1 쿼리 실행 절차
      • 6.1.2 옵티마이저의 종류
      • 6.1.3 통계 정보
    • 6.2 실행 계획 분석
      • 6.2.1 id 칼럼
      • 6.2.2 select_type 칼럼
      • 6.2.3 table 칼럼
      • 6.2.4 type 칼럼
      • 6.2.5 possible_keys
      • 6.2.6 key
      • 6.2.7 key_len
      • 6.2.8 ref
      • 6.2.9 rows
      • 6.2.10 Extra
      • 6.2.11 EXPLAIN EXTENDED(Filtered 칼럼)
      • 6.2.12 EXPLAIN EXTENDED(추가 옵티마이저 정보)
    • 6.3 MySQL의 주요 처리 방식
      • 6.3.1 풀 테이블 스캔
      • 6.3.2 ORDER BY 처리(Using filesort)
      • 6.3.3 GROUP BY 처리
      • 6.3.4 DISTINCT 처리
      • 6.3.5 임시 테이블(Using temporary)
      • 6.3.6 테이블 조인
    • 6.4 실행 계획 분석 시 주의사항
      • 6.4.1 Select_type 칼럼의 주의 대상
      • 6.4.2 Type 칼럼의 주의 대상
      • 6.4.3 Key 칼럼의 주의 대상
      • 6.4.4 Rows 칼럼의 주의 대상
      • 6.4.5 Extra 칼럼의 주의 대상
    •  
  • 07장_쿼리 작성 및 최적화
    • 7.1 쿼리와 연관된 시스템 설정
      • 7.1.1 SQL 모드
      • 7.1.2 영문 대소문자 구분
      • 7.1.3 MySQL 예약어
    • 7.2 매뉴얼의 SQL 문법 표기를 읽는 방법
    • 7.3 MySQL 연산자와 내장 함수
      • 7.3.1 리터럴 표기법
      • 7.3.2 숫자
      • 7.3.3 날짜
      • 7.3.4 MySQL 연산자
      • 7.3.5 MySQL 내장 함수
      • 7.3.6 SQL 주석
    • 7.4 SELECT
      • 7.4.1 SELECT 각 절의 처리 순서
      • 7.4.2 WHERE 절과 GROUP BY 절,그리고 ORDER BY 절의 인덱스 사용
      • 7.4.3 WHERE 절의 비교 조건 사용 시 주의사항
      • 7.4.4 DISTINCT
      • 7.4.5 LIMIT n
      • 7.4.6 JOIN
      • 7.4.7 GROUP BY
      • 7.4.8 ORDER BY
      • 7.4.9 서브 쿼리
      • 7.4.10 집합 연산
      • 7.4.11 SELECT INTO OUTFILE
    • 7.5 INSERT
      • 7.5.1 INSERT와 AUTO_INCREMENT
      • 7.5.2 INSERT IGNORE
      • 7.5.3 REPLACE
      • 7.5.4 INSERT INTO …ON DUPLICATE KEY UPDATE …
      • 7.5.5 INSERT ... SELECT
      • 7.5.6 LOAD DATA(LOCAL) INFILE …
    • 7.6 UPDATE
      • 7.6.1 UPDATE … ORDER BY … LIMIT n
      • 7.6.2 JOIN UPDATE
    • 7.7 DELETE
      • 7.7.1 DELETE … ORDER BY … LIMIT n
      • 7.7.2 JOIN DELETE
    • 7.8 스키마 조작 (DDL)
      • 7.8.1 데이터베이스
      • 7.8.2 테이블
      • 7.8.3 칼럼 변경
      • 7.8.4 인덱스 변경
      • 7.8.5 프로세스 조회
      • 7.8.6 프로세스 강제 종료
      • 7.8.7 시스템 변수 조회 및 변경
      • 7.8.8 경고나 에러 조회
      • 7.8.9 권한 조회
    • 7.9 SQL 힌트
      • 7.9.1 힌트의 사용법
      • 7.9.2 STRAIGHT_JOIN
      • 7.9.3 USE INDEX / FORCE INDEX / IGNORE INDEX
      • 7.9.4 SQL_CACHE / SQL_NO_CACHE
      • 7.9.5 SQL_CALC_FOUND_ROWS
      • 7.9.6 기타 힌트
    • 7.10 쿼리 성능 테스트
      • 7.10.1 쿼리의 성능에 영향을 미치는 요소
      • 7.10.2 쿼리의 성능 테스트
      • 7.10.3 쿼리 프로파일링
    •  
  • 08장_확장 기능
    • 8.1 전문 검색
      • 8.1.1 전문 검색 엔진의 종류와 특성
      • 8.1.2 MySQL 빌트인 전문 검색
      • 8.1.3 트리톤 전문 검색
      • 8.1.4 mGroonga 전문 검색
    • 8.2 공간 검색
      • 8.2.1 R-Tree 인덱스를 사용하는 이유
      • 8.2.2 위도나 경도 정보를 이용한 거리 계산
      • 8.2.3 R-Tree를 이용한 위치 검색
    •  
  • 09장_사용자 정의 변수
    • 9.1 사용자 정의 변수 소개
    • 9.2 사용자 변수의 기본 활용
    • 9.3 사용자 변수의 적용 예제
      • 9.3.1 N 번째 레코드만 가져오기
      • 9.3.2 누적 합계 구하기
      • 9.3.3 그룹별 랭킹 구하기
      • 9.3.4 랭킹 업데이트하기
      • 9.3.5 GROUP BY와 ORDER BY가 인덱스를 사용하지 못하는 쿼리
    • 9.4 주의사항
    •  
  • 10장_파티션
    • 10.1 파티션의 개요
      • 10.1.1 파티션을 사용하는 이유
      • 10.1.2 MySQL 파티션의 내부 처리
    • 10.2 파티션 주의사항
      • 10.2.1 파티션의 제한 사항
      • 10.2.2 파티션 사용시 주의사항
    • 10.3 MySQL 파티션의 종류
      • 10.3.1 레인지 파티션
      • 10.3.2 리스트 파티션
      • 10.3.3 해시 파티션
      • 10.3.4 키 파티션
      • 10.3.5 리니어 해시 파티션/리니어 키 파티션
      • 10.3.6 서브 파티션
      • 10.3.7 파티션 테이블의 실행 계획
      • 10.3.8 파티션 테이블 관련 벤치마킹
      • 10.3.9 파티션 기능에 대한 결론
    •  
  • 11장_스토어드 프로그램
    • 11.1 스토어드 프로그램의 장단점
      • 11.1.1 스토어드 프로그램의 장점
      • 11.1.2 스토어드 프로그램의 단점
    • 11.2 스토어드 프로그램의 문법
      • 11.2.1예제 테스트 시 주의사항
      • 11.2.2 스토어드 프로시저
      • 11.2.3 스토어드 함수
      • 11.2.4 트리거
      • 11.2.5 이벤트
      • 11.2.6 스토어드 프로그램 본문(Body) 작성
    • 11.3 스토어드 프로그램의 권한 및 옵션
      • 11.3.1 DEFINER 와 SQL SECURITY 옵션
      • 11.3.2 스토어드 프로그램의 권한
      • 11.3.3 DETERMINISTIC과 NOT DETERMINISTIC 옵션
    • 11.4 스토어드 프로그램의 참고 및 주의사항
      • 11.4.1 한글 처리
      • 11.4.2 스토어드 프로그램과 세션 변수
      • 11.4.3 스토어드 프로시저와 재귀 호출(Recursive call)
      • 11.4.4 중첩된 커서 사용
    •  
  • 12장_쿼리 종류별 잠금
    • 12.1 InnoDB의 기본 잠금 방식
      • 12.1.1 SELECT
      • 12.1.2 INSERT, UPDATE, DELETE
    • 12.2 SQL 문장별로 사용하는 잠금
      • 12.2.1 SELECT 쿼리의 잠금
      • 12.2.2 INSERT 쿼리의 잠금
      • 12.2.3 UPDATE 쿼리의 잠금
      • 12.2.4 DELETE 쿼리의 잠금
      • 12.2.5 DDL 문장의 잠금
      • 12.2.6 InnoDB에서 여러 쿼리 패턴 간의 잠금 대기
    • 12.3 InnoDB에서 데드락 만들기
      • 12.3.1 패턴 1(상호 거래 관련)
      • 12.3.2 패턴 2(유니크 인덱스 관련)
      • 12.3.3 패턴 3(외래키 관련)
      • 12.3.4 패턴 4(서로 다른 인덱스를 통한 잠금)
    •  
  • 13장_프로그램 연동
    • 13.1 자바
      • 13.1.1 JDBC 버전
      • 13.1.2 MySQL Connector/J를 이용한 개발
    • 13.2 C/C
      • 13.2.1 주요 헤더 파일과 MySQL 예제
      • 13.2.2 에러 처리
      • 13.2.3 프로그램의 컴파일
      • 13.2.4 MySQL 서버 접속
      • 13.2.5 설정 파일 읽기
      • 13.2.6 SELECT 실행
      • 13.2.7 INSERT / UPDATE / DELETE 실행
      • 13.2.8 다중 문장 실행과 다중 결과 셋 가져오기
      • 13.2.9 커넥션 옵션
      • 13.2.10 프리페어 스테이트먼트 사용
    •  
  • 14장_데이터 모델링
    • 14.1 논리 모델링
      • 14.1.1 모델링 용어
      • 14.1.2 용어집
      • 14.1.3 엔터티
      • 14.1.4 식별자(프라이머리 키)
      • 14.1.5 관계(릴레이션)
      • 14.1.6 엔터티의 통합
      • 14.1.7 관계의 통합
      • 14.1.8 모델 정규화
    • 14.2 물리 모델링
      • 14.2.1 프라이머리 키 선택
      • 14.2.2 데이터 타입 선정
      • 14.2.3 반정규화
    •  
  • 15장_데이터 타입
    • 15.1 문자열(CHAR와 VARCHAR)
      • 15.1.1 저장 공간
      • 15.1.2 비교 방식
      • 15.1.3 문자집합(캐릭터 셋)
      • 15.1.4 콜레이션(Collation)
      • 15.1.5 문자열 이스케이프 처리
    • 15.2 숫자
      • 15.2.1 정수
      • 15.2.2 부동 소수점
      • 15.2.3 DECIMAL
      • 15.2.4 정수 타입의 칼럼을 생성할 때의 주의사항
      • 15.2.5 자동 증가(AUTO_INCREMENT) 옵션 사용
    • 15.3 날짜와 시간
      • 15.3.1 TIMESTAMP 타입의 옵션
      • 15.3.2 타임 존 등록 및 사용
    • 15.4 ENUM과 SET
      • 15.4.1 ENUM
      • 15.4.2 SET
    • 15.5 TEXT, BLOB
    • 15.6 공간(Spatial) 데이터 타입
      • 15.6.1 POINT 타입
      • 15.6.2 LINESTRING 타입
      • 15.6.3 POLYGON 타입
      • 15.6.4 GEOMETRY 타입
    •  
  • 16장_베스트 프랙티스
    • 16.1 임의(랜덤) 정렬
      • 16.1.1 지금까지의 구현
      • 16.1.2 인덱스를 이용한 임의 정렬 방법
    • 16.2 페이징 쿼리
      • 16.2.1 지금까지의 방법
      • 16.2.2 불필요한 접근을 제거하기 위한 페이징 쿼리
    • 16.3 MySQL에서 시퀀스 구현
      • 16.3.1 시퀀스용 테이블 준비
      • 16.3.2 시퀀스를 위한 스토어드 함수
      • 16.3.3 여러 시퀀스 처리하기
      • 16.3.4 시퀀스 사용 시 주의사항
    • 16.4 큰 문자열 칼럼의 인덱스(해시)
    • 16.5 테이블 파티션
    • 16.6 SNS의 타임라인 구현
      • 16.6.1 예제 시나리오
      • 16.6.2 인덱스 테이블 사용
      • 16.6.3 Try & Fail 쿼리
    • 16.7 MySQL 표준 설정
      • 16.7.1 MySQL 표준 설정의 필요성
      • 16.7.2 표준 설정의 예시
    • 16.8 복제를 사용하지 않는 MySQL의 설정
    • 16.9 MySQL 복제 구축
      • 16.9.1 MySQL 복제의 형태
      • 16.9.2 확장(스케일 아웃)
      • 16.9.3 가용성
      • 16.9.4 복제가 구축된 MySQL에서의 작업
    • 16.10 SQL 작성 표준
      • 16.10.1 조인 조건은 항상 ON 절에 기재
      • 16.10.2 테이블 별칭(Alias) 사용 및 칼럼 명에 테이블 별칭 포함
      • 16.10.3 서버 사이드 프리페어 스테이트먼트 사용
      • 16.10.4 FULL GROUP BY 사용
      • 16.10.5 DELETE, UPDATE 쿼리에서 ORDER BY LIMIT 사용 자제
      • 16.10.6 문자열 리터럴 표기는 홑 따옴표만 사용
      • 16.10.7 서브쿼리는 조인으로 변경
      • 16.10.8 UNION ALL은 사용 자제
      • 16.10.9 스토어드 함수는 가능하면 DETERMINISTIC으로 정의
      • 16.10.10 스토어드 프로그램에서는 예외 처리 코드를 작성
      • 16.10.11 UPDATE, DELETE 쿼리와 적용 건수(Affected row counts) 체크
      • 16.10.12 숫자 값은 반드시 숫자 타입의 칼럼으로 정의
    • 16.11 하드웨어와 플랫폼 선정
      • 16.11.1 하드웨어 선정
      • 16.11.2 운영체제의 파일 시스템 선정
    • 16.12 백업 및 모니터링
      • 16.12.1 백업(EnterpriseBackup과 mysqldump)
    • 16.13 스키마 검토
    •  
  • 17장_응급 처치
    • 17.1 서버 과부하
      • 17.1.1 운영체제의 유틸리티를 이용해 장비의 부하 확인
      • 17.1.2 MySQL 서버의 에러 로그 확인
      • 17.1.3 MySQL 서버의 프로세스 리스트 확인..... 981
      • 17.1.4 MySQL 서버의 최대 커넥션 설정 확인... 982
      • 17.1.5 MySQL 서버의 슬로우 쿼리 분석
      • 17.1.6 쿼리의 실행 빈도 확인
      • 17.1.7 각 원인별 조치
    • 17.2 MySQL 서버 셧다운
    • 17.3 MySQL 복구(데이터 파일 손상)
      • 17.3.1 MyISAM
      • 17.3.2 InnoDB
    • 17.4 테이블 메타 정보의 불일치
    • 17.5 복제가 멈추었을 때
    • 17.6 경고 메시지로 에러 로그 파일이 커질 때
    • 17.7 바이너리 로그로 디스크가 꽉 찬 경우
    • 17.8 마스터 MySQL 서버에서 함수 생성 오류
    • 17.9 MySQL의 DB명 변경
    • 17.10 DB의 테이블 생성 DDL만 덤프
    • 17.11 mysqldump의 결과를 다른 이름의 DB로 적재
    • 17.12 테이블이나 레코드의 잠금 해결
    • 17.13 InnoDB의 잠금 대기 시간 초과
    • 17.14 MySQL 서버의 호스트 잠금
    •  
  • 부록_A MySQL 5.1(InnoDB Plugin 1.0) 새로운 기능
    • A.1 MySQL 5.1의 신기능
      • A.1.1 파티션
      • A.1.2 레코드 기반의복제(Row-based replication)
      • A.1.3 플러그인 API
      • A.1.4 이벤트 스케줄러
      • A.1.5 서버 로그 테이블
    • A.2 InnoDB 플러그인 1.0의 신기능
      • A.2.1 InnoDB의 빠른 인덱스 생성
      • A.2.2 InnoDB 데이터 압축
      • A.2.3 BLOB이나 TEXT 타입 관리
      • A.2.4 InnoDB 파일 포맷 관리
      • A.2.5 InnoDB INFORMATION_SCHEMA 테이블
      • A.2.6 확장성 개선을 위한 빠른 잠금 처리
      • A.2.7 운영체제의 메모리 할당 기능 사용
      • A.2.8 InnoDB 인서트 버퍼 제어
      • A.2.9 Adaptive Hash Index 제어
      • A.2.10 Read Ahead 알고리즘의 개선
      • A.2.11 다중 백그라운드 I/O 스레드
      • A.2.12 그룹 커밋
      • A.2.13 마스터 스레드의 I/O 성능 제어
      • A.2.14 더티 페이지의 플러시 제어
      • A.2.15 Spin loop에서 PAUSE 사용
      • A.2.16 버퍼 풀의 관리 기능 개선
      • A.2.17 여러 시스템 설정의 동적인 제어
      • A.2.18 TRUNCATE TABLE 시에 테이블 스페이스 공간 반납
      • A.2.19 InnoDB의 통계 수집을 위한 페이지 샘플링 수 조절
    •  
  • 부록_B MySQL 5.5 (InnoDB Plugin 1.1) 신기능
    • B.1 MySQL 서버의 개선 사항
      • B.1.1 스레드 풀
      • B.1.2 사용자 인증 플러그인 아키텍처
      • B.1.3 반동기 복제(Semi-synchronous Replication)
      • B.1.4 유니코드 지원 확장
      • B.1.5 기본 스토리지 엔진의 변경
      • B.1.6 SIGNAL과 RESIGNAL 기능 추가
      • B.1.7 파티션 기능 개선
    • B.2 InnoDB 플러그인 1.1의 개선 사항
      • B.2.1 인덱스 생성 방식 변경
      • B.2.2 트랜잭션 복구 성능 향상
      • B.2.3 InnoDB 성능 진단을 위한 PERFORMANCE_SCHEMA
      • B.2.4 다중 버퍼 풀
      • B.2.5 다중 롤백 세그먼트
      • B.2.6 버퍼 풀 관련 뮤텍스 개선
      • B.2.7 인서트 버퍼 처리 개선
      • B.2.8 비동기화된 디스크 I/O
    •  
  • 부록_C MySQL 5.6 신기능
    • C.1 InnoDB 테이블을 위한 풀 텍스트 검색
    • C.2 InnoDB의 리두 로그 파일 크기
    • C.3 언두 테이블 스페이스
    • C.4 InnoDB 버퍼 풀의 자동 워밍 업
    • C.5 InnoDB의 페이지 크기 조정
    • C.6 멀티 스레드 슬레이브
    • C.7 Memcached를 통한 NoSQL 확장

예제코드 관련 GitHub 페이지

관련 글


엮인 글

엮인 글 주소: http://wikibook.co.kr/real-mysql/trackback/