이미 소장하고 있다면 판매해 보세요.
|
▣ 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% 전달한다는 것은 어려움이 있을 것으로 생각한다. 그래서 이 책을 위한 카페(http://cafe.naver.com/realmysql)를 별도로 개설했으며, 책에서 설명하는 내용 가운데 이해하기 어렵거나 책에 언급된 내용이 아니더라도 MySQL을 사용하면서 느끼는 어려움이 있다면 카페를 통해 도움을 드리겠다. ---저자 서문 중에서 |
|
Real MySQL은 기본적인 SQL 문법 소개나 매뉴얼의 번역 수준을 벗어나서 MySQL을 이용하는 애플리케이션 개발이나 운영을 통해 얻은 경험과 지식, 그리고 반드시 알고 있어야 할 주의사항 위주로 내용을 구성했다. 이 책을 처음부터 끝까지 다 읽는다면 더없이 좋겠지만, 필요하거나 관심 있는 내용 위주로 살펴봐도 지금까지 가지고 있었던 많은 고민거리를 해결할 수 있을 것이다.
★ 이 책에서 다루는 내용 ★ o MySQL 서버의 아키텍처와 MySQL 설치 o 인덱스의 종류와 구조 및 활용 o 쿼리의 실행 계획 분석 및 최적화 o MySQL 서버와 연동하는 프로그램 개발 o 스토어드 프로그램 개발 및 사용자 변수 활용 o 데이터 모델링 및 최적의 데이터 타입 선정 o 개발을 위한 베스트 프랙티스 o MySQL 서버 응급처치 |