마리아DB(MariaDB) & MySQL | ▣ 01장: MariaDB _1.1 MariaDB란? _1.2 MariaDB vs. MySQL __1.2.1 MariaDB와 MySQL 그리고 PerconaServer __1.2.2 공통점 __1.2.3 차이점 ___1.2.3.1 라이선스 ___1.2.3.2 스토리지 엔진 ___1.2.3.3 기능 ___1.2.3.4 옵티마이저 __1.2.4 버전별 호환성 __1.2.5 성능 비교 __1.2.6 MariaDB가 MySQL을 대체하게 될까? __1.2.7 MariaDB와 MySQL 선택 ▣ 02장: 설치 _2.1 다운로드 _2.2 설치 __2.2.1 윈도우 버전 설치 ___2.2.1.1 설치 프로그램(MSI)을 이용한 설치 ___2.2.1.2 압축(ZIP)된 MariaDB 설치 __2.2.2 리눅스 버전 설치 ___2.2.2.1 RPM을 이용한 설치 ___2.2.2.2 압축(tar.gz)된 MariaDB 설치 _2.3 업그레이드 __2.3.1 MySQL에서 MariaDB로 업그레이드할 때 주의 사항 __2.3.2 버전에 관계없이 가장 안전한 방법 __2.3.3 MySQL 5.0이나 그 이전 버전에서 MariaDB 5.5로 업그레이드 __2.3.4 MySQL 5.1에서 MariaDB 5.5로 업그레이드 __2.3.5 MySQL 5.5에서 MariaDB 5.5로 업그레이드 ▣ 03장: MariaDB 기동 및 쿼리 실행 _3.1 서버 시작 및 종료 __3.1.1 리눅스에서 MariaDB 서버의 시작과 종료 ___3.1.1.1 서비스로 등록된 경우 ___3.1.1.2 서비스로 등록되지 않은 경우 __3.1.2 윈도우에서 MariaDB 서버의 시작과 종료 ___3.1.2.1 서비스로 등록된 경우 ___3.1.2.2 서비스로 등록되지 않은 경우 _3.2 서버 로그인 __3.2.1 서버 로그인 및 버전 확인 __3.2.2 mysql 클라이언트 프로그램 옵션 ___3.2.2.1 안전 모드로 mysql 클라이언트 실행 ___3.2.2.2 --execute 옵션으로 mysql 클라이언트 실행 ___3.2.2.3 --batch 모드와 함께 --execute 옵션으로 mysql 클라이언트 실행 ___3.2.2.4 --batch 모드로 --skip-column-names와 함께 --execute 옵션으로 mysql 클라이언트 실행 _3.3 데이터베이스 및 사용자 생성 __3.3.1 MariaDB의 사용자 계정 인식과 권한 ___3.3.1.1 사용자의 식별 ___3.3.1.2 권한 ___3.3.1.3 권한의 부여 ___3.3.1.4 권한 그룹 __3.3.2 MariaDB의 기본 사용자 __3.3.3 MariaDB의 기본 데이터베이스 __3.3.4 새로운 데이터베이스 생성 __3.3.5 사용자 생성 ___3.3.5.1 사용자 생성 및 권한 부여 ___3.3.5.2 관리자 계정 준비 _3.4 테이블 생성 및 변경 __3.4.1 테이블 생성 __3.4.2 테이블 변경(온라인 및 오프라인) ___3.4.2.1 오프라인 스키마 변경 ___3.4.2.2 MariaDB의 온라인 스키마 변경 ___3.4.2.3 MySQL의 온라인 스키마 변경 ___3.4.2.4 pt-online-schema-change ___3.4.2.5 온라인 스키마 변경을 사용해도 될까? __3.4.3 테이블 삭제 _3.5 데이터 조작 __3.5.1 INSERT __3.5.2 SELECT __3.5.3 UPDATE __3.5.4 REPLACE __3.5.5 DELETE ▣ 04장: 실행 계획 분석 _4.1 개요 __4.1.1 쿼리 실행 절차 __4.1.2 옵티마이저의 종류 __4.1.3 통계 정보 ___4.1.3.1 MySQL 5.6의 통계 정보 ___4.1.3.2 MariaDB 10.0의 통계 정보 __4.1.4 히스토그램 통계 정보 ___4.1.4.1 히스토그램이란? ___4.1.4.2 MariaDB에서 히스토그램 사용 __4.1.5 조인 옵티마이저 옵션 _4.2 예제 데이터 준비 __4.2.1 예제 데이터 적재 __4.2.2 통계 정보 수집 _4.3 실행 계획 분석 __4.3.1 id 칼럼 __4.3.2 select_type 칼럼 ___4.3.2.1 SIMPLE ___4.3.2.2 PRIMARY ___4.3.2.3 UNION ___4.3.2.4 DEPENDENT UNION ___4.3.2.5 UNION RESULT ___4.3.2.6 SUBQUERY ___4.3.2.7 DEPENDENT SUBQUERY ___4.3.2.8 DERIVED ___4.3.2.9 UNCACHEABLE SUBQUERY ___4.3.2.10 UNCACHEABLE UNION ___4.3.2.11 MATERIALIZED ___4.3.2.12 INSERT __4.3.3 table 칼럼 __4.3.4 type 칼럼 ___4.3.4.1 system ___4.3.4.2 const ___4.3.4.3 eq_ref ___4.3.4.4 ref ___4.3.4.5 fulltext ___4.3.4.6 ref_or_null ___4.3.4.7 unique_subquery ___4.3.4.8 index_subquery ___4.3.4.9 range ___4.3.4.10 index_merge ___4.3.4.11 index ___4.3.4.12 ALL __4.3.5 possible_keys 칼럼 __4.3.6 key 칼럼 __4.3.7 key_len 칼럼 __4.3.8 ref 칼럼 __4.3.9 rows 칼럼 __4.3.10 Extra 칼럼 ___4.3.10.1 const row not found ___4.3.10.2 Distinct ___4.3.10.3 Full scan on NULL key ___4.3.10.4 Impossible HAVING ___4.3.10.6 Impossible WHERE noticed after reading const tables ___4.3.10.7 No matching min/max row ___4.3.10.8 no matching row in const table ___4.3.10.9 No tables used ___4.3.10.10 Not exists ___4.3.10.11 Range checked for each record(index map: N) ___4.3.10.12 Scanned N databases ___4.3.10.13 Select tables optimized away ___4.3.10.14 Skip_open_table, Open_frm_only, Open_trigger_only, Open_full_table ___4.3.10.15 unique row not found ___4.3.10.16 Using filesort ___4.3.10.17 Using index(커버링 인덱스) ___4.3.10.18 Using index for group-by ___4.3.10.19 Using join buffer(Block Nested Loop), Using join buffer(Batched Key Access) ___4.3.10.20 Using sort_union, Using union, Using intersect, Using sort_intersection ___4.3.10.21 Using temporary ___4.3.10.22 Using where ___4.3.10.23 Using where with pushed condition ___4.3.10.24 Deleting all rows ___4.3.10.25 FirstMatch(tbl_name) ___4.3.10.26 LooseScan(m n) ___4.3.10.27 Materialize, Scan ___4.3.10.28 Start materialize, End materialize, Scan ___4.3.10.29 Start temporary, End temporary ___4.3.10.30 Using index condition ___4.3.10.31 Rowid-ordered scan, Key-ordered scan ___4.3.10.32 No matching rows after partition pruning __4.3.11 EXPLAIN EXTENDED(Filtered 칼럼) __4.3.12 EXPLAIN EXTENDED(추가 옵티마이저 정보) __4.3.13 EXPLAIN PARTITIONS(Partitions 칼럼) _4.4 옵티마이저 힌트 __4.4.1 힌트의 사용법 __4.4.2 STRAIGHT_JOIN __4.4.3 USE INDEX / FORCE INDEX / IGNORE INDEX __4.4.4 SQL_CACHE / SQL_NO_CACHE __4.4.5 SQL_CALC_FOUND_ROWS __4.4.6 기타 힌트 _4.5 실행 계획 분석 시 주의사항 __4.5.1 Select_type 칼럼의 주의 대상 __4.5.2 Type 칼럼의 주의 대상 __4.5.3 Key 칼럼의 주의 대상 __4.5.4 Rows 칼럼의 주의 대상 __4.5.5 Extra 칼럼의 주의 대상 ___4.5.5.1 쿼리가 요건을 제대로 반영하고 있는지 확인해야 하는 경우 ___4.5.5.2 쿼리의 실행 계획이 좋지 않은 경우 ___4.5.5.3 쿼리의 실행 계획이 좋은 경우 ▣ 05장: 최적화 _5.1 풀 테이블 스캔 _5.2 ORDER BY 처리(Using filesort) __5.2.1 소트 버퍼(Sort buffer) __5.2.2 정렬 알고리즘 __5.2.3 정렬의 처리 방식 ___5.2.3.1 인덱스를 사용한 정렬 ___5.2.3.2 드라이빙 테이블만 정렬 ___5.2.3.3 임시 테이블을 이용한 정렬 ___5.2.3.4 정렬 방식의 성능 비교 __5.2.4 ORDER BY....LIMIT n 최적화 __5.2.5 정렬 관련 상태 변수 _5.3 GROUP BY 처리 __5.3.1 인덱스 스캔을 이용하는 GROUP BY(타이트 인덱스 스캔) __5.3.2 루스(loose) 인덱스 스캔을 이용하는 GROUP BY __5.3.3 임시 테이블을 사용하는 GROUP BY _5.4 DISTINCT 처리 __5.4.1 SELECT DISTINCT __5.4.2 집함 함수와 함께 사용된 DISTINCT _5.5 임시 테이블(Using temporary) __5.5.1 임시 테이블이 필요한 쿼리 __5.5.2 임시 테이블이 디스크에 생성되는 경우(Aria 스토리지 엔진을 사용) __5.5.3 임시 테이블 관련 상태 변수 __5.5.4 인덱스를 가지는 내부 임시 테이블 __5.5.5 내부 임시 테이블(Internal Temporary Table)의 주의사항 _5.6 인덱스 컨디션 푸시다운(Index Condition Pushdown, ICP) _5.7 멀티 레인지 리드(Multi Range Read) __5.7.1 RowId 기준 정렬(Rowid-ordered scan) __5.7.2 Key 기준 정렬(Key-ordered scan) __5.7.3 Key와 RowId 모두 정렬(Key-ordered, Rowid-ordered scan) __5.7.4 멀티 레인지 리드 최적화와 정렬 __5.7.5 멀티 레인지 리드 최적화 주의 사항 _5.8 인덱스 머지(Index merge) __5.8.1 Using union __5.8.2 Using sort_union __5.8.3 Using intersect __5.8.4 Using sort_intersect _5.9 테이블 조인 __5.9.1 조인의 종류 ___5.9.1.1 JOIN (INNER JOIN) ___5.9.1.2 OUTER JOIN ___5.9.1.3 카테시안 조인 ___5.9.1.4 NATURAL JOIN __5.9.2 조인 알고리즘 ___5.9.2.1 조인 캐시 레벨(join_cache_level) ___5.9.2.2 조인 버퍼 설정 ___5.9.2.3 단순 네스티드 루프(Simple Nested Loop, NL) ___5.9.2.4 블록 네스티드 루프(Block Nested Loop, BNL) ___5.9.2.5 블록 네스티드 루프 해시(Block Nested Loop Hash, BNLH) ___5.9.2.6 블록 인덱스 조인(Block Index Join, Batched Key Access, BKA) ___5.9.2.7 블록 인덱스 해시 조인(Block Index Hash Join, Batched Key Access Hash) __5.9.3 조인의 주의사항 ___5.9.3.1 조인 실행 결과의 정렬 순서 ___5.9.3.2 INNER JOIN과 OUTER JOIN의 선택 _5.10 서브 쿼리 __5.10.1 세미 조인 서브쿼리 최적화 ___5.10.1.1 Table pullout 최적화 ___5.10.1.2 FirstMatch 최적화 ___5.10.1.3 Semi-join Materialization 최적화 ___5.10.1.4 LooseScan 최적화 ___5.10.1.5 Duplicate Weedout 최적화 __5.10.2 세미 조인이 아닌 서브쿼리 최적화 ___5.10.2.1 Materialization ___5.10.2.2 IN-to-EXISTS __5.10.3 서브 쿼리 캐시 ▣ 06장: 스토리지 엔진 _6.1 Aria 스토리지 엔진 __6.1.1 트랜잭션 __6.1.2 페이지 캐시 __6.1.3 시스템 설정 변수 _6.2 XtraDB 스토리지 엔진 __6.2.1 InnoDB와 XtraDB 스토리지 엔진 교체 _6.3 InnoDB 스토리지 엔진 __6.3.1 MySQL 5.6 InnoDB ___6.3.1.1 영구적인 통계 정보 ___6.3.1.2 데이터 읽기 최적화 ___6.3.1.3 커널 뮤텍스(Kernel mutex) ___6.3.1.4 멀티 스레드 기반의 언두 퍼지(Multi threaded purge) ___6.3.1.5 독립된 플러시 스레드 ___6.3.1.6 가변 페이지 사이즈 ___6.3.1.7 테이블 스페이스 복사(Transportable tablespace) ___6.3.1.8 독립된 언두 스페이스 ___6.3.1.9 읽기 전용 트랜잭션(Read-only transaction) 최적화 ___6.3.1.10 버퍼 풀 덤프 & 로드 ___6.3.1.11 리두 로그 사이즈 ___6.3.1.12 리두 로그 크기 변경 ___6.3.1.13 데드락 이력 __6.3.2 더티 페이지 플러시 ___6.3.2.1 플러시 리스트 플러시 ___6.3.2.2 LRU 리스트 플러시 ___6.3.2.3 InnoDB와 XtraDB의 더티 플러시 ___6.3.2.4 MySQL 5.5 InnoDB의 더티 플러시 ___6.3.2.5 MariaDB 5.5 XtraDB의 더티 플러시 ___6.3.2.6 MySQL 5.6 InnoDB의 더티 플러시 ___6.3.2.7 MariaDB 10.0의 XtraDB __6.3.3 버퍼 풀 성능 개선 ___6.3.3.1 NUMA ___6.3.3.2 버퍼 풀 메모리 초기 할당 ___6.3.3.3 InnoDB 잠금 세분화 ___6.3.3.4 I/O 기반의 워크로드 성능 향상 ___6.3.3.5 어댑티브 해시 파티션 __6.3.4 원자 단위의 쓰기(FusionIO SSD를 위한 Atomic write) __6.3.5 확장된 InnoDB 엔진 상태 출력 ___6.3.5.1 백그라운드 스레드 관련 상태 변수 ___6.3.5.2 세마포어 관련 상태 변수 ___6.3.5.3 인서트 버퍼와 어댑티브 해시 인덱스 관련 상태 변수 ___6.3.5.4 로그 관련 상태 변수 ___6.3.5.5 버퍼 풀 관련 상태 변수 ___6.3.5.6 트랜잭션 관련 상태 변수 __6.3.6 XtraDB 리두 로그 아카이빙 __6.3.7 변경된 페이지 트랙킹 _6.4 전문 검색 엔진 __6.4.1 전문 검색 인덱스 추가 __6.4.2 전문 검색 인덱스를 위한 테이블 스페이스 __6.4.3 전문 검색 인덱스 관련 INFORMATION_SCHEMA 정보 ___6.4.3.1 InnoDB의 모든 전문 검색 인덱스에 적용되는 내용 ___6.4.3.2 전문 검색 인덱스를 가진 테이블 단위로 적용되는 내용 __6.4.4 전문 검색 인덱스 사용 __6.4.5 주의 사항 _6.5 Memcached 플러그인 __6.5.1 아키텍처 __6.5.2 설치 및 테스트 __6.5.3 캐시 정책 __6.5.4 사용자 테이블 등록 __6.5.5 관련 시스템 변수 _6.6 카산드라 스토리지 엔진 __6.6.1 카산드라 __6.6.2 카산드라 스토리지 엔진 _6.7 CONNECT 스토리지 엔진 __6.7.1 CONNECT 스토리지 엔진 설치 __6.7.2 오라클 RDBMS 테이블 연결 __6.7.3 my.cnf 설정 파일 연결 __6.7.4 운영체제의 디렉터리 연결 _6.8 시퀀스 스토리지 엔진 __6.8.1 시퀀스 스토리지 엔진 기본 사용법 __6.8.2 누락된 번호 찾기 __6.8.3 순차적으로 조합된 번호 쌍 생성 __6.8.4 배수 또는 공배수 찾기 __6.8.5 순차적인 알파벳 생성 __6.8.6 순차적인 날짜 생성 __6.8.7 데이터 복제 가공 _6.9 Mroonga 전문 검색 스토리지 엔진 __6.9.1 인덱스 알고리즘 ___6.9.1.1 구분자(Stopword) 방식 ___6.9.1.2 n-Gram 방식 ___6.9.1.3 구분자와 n-Gram의 차이 __6.9.2 Mroonga 전문 검색 엔진 설치 __6.9.3 Mroonga 전문 검색 엔진 사용 ▣ 07장: 기타 기능 _7.1 성능 향상 __7.1.1 스레드 풀(Thread Pool) ___7.1.1.1 MySQL 서버의 전통적인 연결 및 처리 방식 ___7.1.1.2 MariaDB의 스레드 풀 ___7.1.1.3 MariaDB 스레드 풀의 사용과 튜닝 ___7.1.1.4 주의 사항 _7.2 관리 및 진단 __7.2.1 SHOW EXPLAIN FOR [THREAD-ID |
---|