책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 웹 서비스/웹 프로그래밍
· ISBN : 9788992939003
· 쪽수 : 1040쪽
· 출판일 : 2012-05-08
책 소개
목차
▣ 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 확장
저자소개
리뷰
책속에서
2010년에 접어들면서 수많은 NoSQL 도구가 대용량 데이터 저장에 최적인 것처럼 온라인 사이트들을 장식했다. 예전에 오라클 데이터베이스가 그래 왔던 것처럼 말이다. 많은 사람들이 유행을 좇아 NoSQL을 공부하고 있지만, 안타깝게도 우리가 익숙하게 사용하고 있는 SNS(Social Networking Service)나 SNG(Social Networking Game) 서비스에서 대용량의 핵심 데이터가 최적화된 MySQL 데이터베이스에서 관리된다는 사실을 알고 있는 사람은 많지 않다.
오라클이나 MSSQL과 같은 상용 데이터베이스와 비교해도 MySQL 서버의 성능이나 효율성은 전혀 손색이 없다. 예전에는 서비스의 가입자 수나 사용자의 수에 비례해 데이터의 양이 늘어났지만, 최근에는 소셜 네트워크 관련 기능이 많이 구현되면서 가입자나 사용자의 몇십 배에서 몇백 배 수준으로 데이터의 양이 늘어나는 경향이 있다. 이처럼 기하급수적으로 늘어나는 데이터를 값비싼 기업용 대형 장비와 소프트웨어를 사용해 관리하기란 거의 불가능한 일이다. 10원을 벌기 위해 100원을 투자할 회사는 없으니 말이다. MySQL 서버는 비용에 대한 부담이 없으며, 다른 상용 데이터베이스 서버와 동등하거나 더 우월한 성능을 제공하므로 최근의 소셜 네트워크 관련 업무 여건에 너무도 잘 들어맞는다.
이 책이 독자들에게 MySQL의 모든 것을 전달하지는 못할 수도 있다. 하지만 개발자로서, 또는 데이터베이스 관리자로서 MySQL을 사용하기 위해 알고 있어야 할 MySQL 서버의 사용법이나 주의사항에 대해 전반적인 지식과 경험을 전해줄 것이라고 믿는다. 또한 독자 한 사람 한 사람의 생각과 경험이 달라서, 글로 저자의 의도를 100% 전달한다는 것은 어려움이 있을 것으로 생각한다. 그래서 이 책을 위한 카페(https://cafe.naver.com/realmysql)를 별도로 개설했으며, 책에서 설명하는 내용 가운데 이해하기 어렵거나 책에 언급된 내용이 아니더라도 MySQL을 사용하면서 느끼는 어려움이 있다면 카페를 통해 도움을 드리겠다.
- 저자 서문 중에서