책정리/Real My SQL

목차

GONII 2021. 1. 20. 16:20

    1. 소개
      1. MySQL 소개
      2. MySQL인가?
    2. 설치와 설정
      1. MySQl 다운로드
      2. MySQl 서버 설치
        1. 리눅스에 설치
        2. 윈도우에 설치(MSI)
      3. 서버 설정
        1. 설정 파일의 구성
        2. MySQL 시스템 변수의 특징
        3. 글로벌 변수와 세션 변수
        4. 동적 변수와 저어적 변수
        5. my.cnf 설정 파일
      4. MySQL 서버의 시작과 종료
        1. 시작과 종료
        2. 서버 연결 테스트
      5. MySQL 복제 구축
        1. 설정 준비
        2. 복제 계정 준비
        3. 데이터 복사
        4. 복제 시작
      6. 권한 관리
        1. 사용자의 식별
        2. 권한
      7. 예제 데이터 적재
      8. 전문 검색을 위한 MySQL 설치
        1. MySQL 내장 전문 검색 엔진
        2. MySQl 5.0 버전의 트리톤 설치
        3. MySQl 5.1 버전의 mGroonga 설치
    3. 아키텍처
      1. MySQL 아키텍처
        1. MySQL 저너체 구조
        2. MySQL 쓰레딩 구조
        3. 메모리 할당 사용 구조
        4. 플러그인 스토리지 엔진 모델
        5. 쿼리 실행 구조
        6. 복제(Replication)
        7. 쿼리 캐시
      2. InnoDB 스토리지 엔진 아키텍처
        1. InnoDB 스토리지 엔진의 특성
        2. InnoDB 버퍼
        3. 언두(Undo) 로그
        4. 인서트 버퍼(Insert Buffer)
        5. 리두(Redo) 로그 로그 버퍼
      3. MVCC
        1. (Multi Version Concurrency Control)
      4. MyISAM 스토리지 엔진 아키텍처
        1. 캐시
        2. 운영체제의 캐시 버ㅓ퍼
      5. MEMORY 스토리지 엔진 아키텍처
        1. 주의 사항
        2. MEMORY 스토리지 엔진의 용도
      6. NDB 클러스터 스토리지 엔진
        1. NDB 클러스터의 특성
        2. NDB 클러스터의 아키텍처
        3. 클러스터 간의 복제 구성
        4. NDB 클러스터의 성능
        5. NDB 클러스터의 네트워크 영향
        6. NDB 클러스터의 용도
      7. TOKUDB 스토리지 엔진
        1. 프랙탈 트리(Fractal Tree) 인덱스 지원
        2. 대용량 데이터와 빠른 INSERT 처리
        3. 트랜잭션 잠금 처리
        4. 이외의 특징
        5. TokuDB 용도
      8. 전문 검색 엔진
        1. 트리톤 전문 검색 엔진
        2. mGroonga 전문 검색 엔진(플러그인)
        3. 스핑크스 전문 검색 엔진
      9. MySQL 로그 파일
        1. 에러 로그 파일
        2. 제너럴 쿼리 로그 파일(제너럴 로그 파일, General log)
      10. 슬로우 쿼리 로그
      11. 바이너리 로그와 릴레이 로그
    4. 트랜잭션과 잠금
      1. 트랜잭션
        1. MySQL에서의 트랜잭션
        2. 주의사항
      2. MySQL 엔진의 잠금
        1. 글로벌
        2. 테이블 (TABLE LOCK)
        3. 유저 (USER LOCK)
        4. 네임
      3. MyISAM MEMORY 스토리지 엔진의 잠금
        1. 잠금 획득
        2. 잠금 튜닝
        3. 테이블 수준의 잠근 확인 해제
      4. InnoDB 스토리지 엔진의 잠금
        1. InnoDB 잠금 방식
        2. InnoDB 잠금 종류
        3. 인덱스와 잠금
        4. 트랜잭션 격리 수준과 잠금
        5. 레코드 수준의 잠금 확인 해제
      5. MySQL 격리 수준
      6. READ UNCOMMITTED
      7. READ COMMITED
      8. REPEATABLE READ
      9. SERIALIZABLE
      10. REPEATABLE READ 격리 수준과 READ COMMITTED 격리 수준의 성능 비교
    5. 인덱스
      1. 디스크 읽기 방식
        1. 저장 매체
        2. 디스크 드라이브와 솔리드 스테이트 드라이브
        3. 랜덤 I/O 순차 I/O
      2. 인덱스란?
      3. B-Tree 인덱스
        1. 구조 특성
        2. B-Tree 인덱스 추가 삭제
        3. B-Tree 인덱스 사용에 영향을 미치는 요소
        4. B-Tree 인덱스를 통한 데이터 읽기
        5. 다중 컬럼(Multi-column) 인덱스
        6. B-Tree  인덱스의 정렬 스캔 방향
        7. B-Tree 인덱스의 가용성과 효율성
      4. 해시(Hash) 인덱스
        1. 구조 특성
        2. 해시 인덱스의 가용성 효율성
      5. R-Tree 인덱스
        1. 구조 특성
        2. R-Tree 인덱스의 용도
      6. Fractal-Tree 인덱스
        1. Fractal-Tree 특성
        2. Fractal-Tree 가용성과 효율성
      7. 전문 검색(Full Text search) 인덱스
        1. 인덱스 알고리즘
        2. 구분자와 N-그램의 차이
        3. 전문 검색 인덱스의 가용성
      8. 비트맵 인덱스와 함수 기반 인덱스
      9. 클러스터링 인덱스
        1. 클러스터링 인덱스
        2. 보조 인덱스(Secondary index) 미치는 영향
        3. 클러스터 인덱스의 장점과 단점
        4. 클러스터 테이블 사용 주의사항
      10. 유니크 인덱스
        1. 유니크 인덱스와 일반 보조 인덱스의 비교
        2. 유니크 인덱스 사용 주의사항
      11. 외래키
        1. 자식 테이블의 변경이 대기하는 경우
        2. 부모 테이블의 변경 작업이 대기하는 경우
      12. 기타 주의사항
    6. 실행 계획
      1. 개요
        1. 쿼리 실행 절차
        2. 옵티마이저의 종류
        3. 통계 정보
      2. 실행 계획 분석
        1. id 컬럼
        2. select_type 컬럼
        3. table 컬럼
        4. type 컬럼
        5. possible_keys
        6. key
        7. key_len
        8. ref
        9. rows
        10. Extra
        11. EXPLAIN EXTENDED(Filtered 컬럼)
        12. EXPLAIN EXTENDED(추가 옵티마이저 정보)
        13. EXPLAIN PARTITIONS(Partitions 컬럼)
      3. MySQL 주요 처리 방식
        1. 테이블 스캔
        2. ORDER BY 처리(Using filesort)
        3. GROUP BY 처리
        4. DISTINCT 처리
        5. 임시 테이블(Using temporary)
        6. 테이블 조인
      4. 실행 계획 분석 주의사항
        1. Select_type 컬럼의 주의 대상
        2. Type 컬럼의 주의 대상
        3. Key 컬럼의 주의 대상
        4. Rows 컬럼의 주의 대상
        5. Extra 컬럼의 주의 대상
    7. 쿼리 작성 최적화
      1. 쿼리와 연관된 시스템 설정
        1. SQL 모드
        2. 영문 대소문자 구분
        3. MySQL 예약어
      2. 메뉴얼의 SQL 문법 표기를 읽는 방법
      3. MySQL 연산자와 내장 함수
        1. 리터럴 표기법
        2. MySQL 연산자
        3. MySQL 내장 함수
        4. SQL 주석
      4. SELECT
        1. SELECT 절의 처리 순서
        2. WHERE 절과 GROUP BY, 그리고 ORDER BY 절의 인덱스 사용
        3. WHERE 절의 비교 조건 사용 주의사항
        4. DISTINCT
        5. LIMIT n
        6. JOIN
        7. GROUP BY
        8. ORDER BY
        9. 서브 쿼리
        10. 집합 연산
        11. LOCK IN SHARE MODE FOR UPDATE
        12. SELECT INTO OUTFILE
      5. INSERT
        1. INSERT AUTO_INCREMENT
        2. INSERT IGNORE
        3. REPLACE
        4. INSERT INTO ... ON DUPLICATE KEY UPDATE
        5. INSERT .. SELECT ..
        6. LOAD DATA(LOCAL) INFILE ..
      6. UPDATE
        1. UPDATE ... ORDER BY ... LIMIT n
        2. JOIN UPDATE
      7. DELETE
        1. DELETE ... ORDER BY ... LIMIT n
        2. JOIN DELETE
      8. 스키마 조작(DDL)
        1. 데이터베이스
        2. 테이블
        3. 칼럼 변경
        4. 인덱스 변경
        5. 프로세스 조회
        6. 프로세스 강제 종료
        7. 시스템 변수 조회 변경
        8. 경고나 ㅓㅓ조회
        9. 권한 조회
      9. SQL 힌트
        1. 힌트의 사용법
        2. STRAIGHT_JOIN
        3. USE INDEX / FORCE INDEX / IGNORE INDEX
        4. SQL_CACHE / SQL_NO_CACHE
        5. SQL_CALC_FOUND_ROWS
        6. 기타 힌트
      10. 쿼리 성능 테스트
        1. 쿼리의 성능에 영향을 미치는 요소
        2. 쿼리의 성능 테스트
        3. 쿼리 프로파일링
    8. 확장 기능
      1. 전문 검색
        1. 전문 검색 엔진의 종류와 특성
        2. MySQL 빌트인 전문 ㄱ머색
        3. 트리톤 전문 검색
        4. mGroonga 전문 검색
      2. 공간 검색
        1. R-Tree 인덱스를 사용하는 경우
        2. 위도나 경도 정보를 이용한 거리 계산
        3. R-Tree 이용한 위치 검색
    9. 사용자 정의 변수
      1. 사용자 정의 변수 소개
      2. 사용자 변수의 기본 활용
      3. 사용자 변수의 적용 예제
        1. N번째 레코드만 가져오기
        2. 누적 합계 구하기
        3. 그룹별 랭킹 구하기
        4. 랭킹 업데이트하기
        5. GROUP BY ORDER BY 인덱스를 사용하지 못하는 쿼리
      4. 주의사항
    10. 파티션
      1. 개요
        1. 파티션을 사용하는 이유
        2. MySQL 파티션의 내부 처리
      2. 주의사항
        1. 파티션의 제한 사항
        2. 파티션 사용 주의사항
      3. MySQl 파티션의 종류
        1. 레인지 파티션
        2. 리스트 파티션
        3. 해시 파티션
        4. 파티션
        5. 리니어 해시 파티션/리니어 파티션
        6. 서브 파티션
        7. 파티션 테이블의 실행 계획
        8. 파티션 테이블 관련 벤치마킹
        9. 파티션 기능에 대한 결론
    11. 스토어드 프로그램
      1. 스토어드 프로그램의 장단점
        1. 스토어드 프로그램의 장점
        2. 스토어드 프로그램의 단점
      2. 스토어드 프로그램의 문법
        1. 예제 테스트 주의사항
        2. 스토어드 프로시저
        3. 스토어드 함수
        4. 트리거
        5. 이벤트
        6. 스토어드 프로그램 본문(Body) 작성
      3. 스토어드 프로그램의 권한 옵션
        1. DEFINER SQL SECURITY 옵션
        2. 스토어드 프로그램의 권한
        3. DETERMINISTIC NOT DETERMINISTIC 옵션
      4. 스토어드 프로그램의 참고 주의사항
        1. 한글 처리
        2. 스토어드 프로그램과 세션 변수
        3. 스토어드 프로시저와 재귀 호출(Recursive call)
        4. 중첩된 커서 사용
    12. 쿼리 종류별 잠금
      1. InnoDB 기본 잠금 방식
        1. SELECT
        2. INSERT, UPDATE, DELETE
      2. SQL 문장별로 사용하는 잠금
        1. SELECT 쿼리의 잠금
        2. INSERT 쿼리의 잠금
        3. UPDATE 쿼리의 잠금
        4. DELETE 쿼리의 잠금
        5. DDL 문장의 잠금
        6. InnoDB에서 여러 쿼리 패턴 간의 잠금 대기
      3. InnoDB에서 데드락 만들기
        1. 패턴 1(상호 거래 관련)
        2. 패턴 2(유니크 인덱스 관련)
        3. 패턴 3(외래키 관련)
        4. 패턴 4(서로 다른 인덱스를 통한 잠금)
    13. 프로그램 연동
      1. 자바
        1. JDBC 버전
        2. MySQL Connector/J 이용한 개발
      2. C/C++
        1. 주요 헤더 파일과 MySQl 예제
        2. 에러 처리
        3. 프로그램 컴파일
        4. MySQl 서버 접속
        5. 설정 파일 읽기
        6. SELECT 실행
        7. INSERT / UPDATE / DELETE 실행
        8. 다중 문장 실행과 다중 결과 가져오기
        9. 커넥션 옵션
        10. 프리페어 스테이트먼트 사용
    14. 데이터 모델링
      1. 논리 모델링
        1. 모델링 용어
        2. 용어집
        3. 엔티티
        4. 어트리뷰트(속성)
        5. 식별자(프라이머리 )
        6. 관계(릴레이션)
        7. 엔티티의 통합
        8. 관계의 통합
        9. 모델 정규화
      2. 물리 모델링
        1. 프라이머리 선택
        2. 데이터 타입 선정
        3. 반정규화
    15. 데이터 타입
      1. 문자열(CHAR VARCHAR)
        1. 저장 공간
        2. 비교 방식
        3. 문자집합(캐릭터 )
        4. 콜레이션(Collation)
        5. 문자열 이스케이프 처리
      2. 숫자
        1. 정수
        2. 부동 소수점
        3. DECIMAL
        4. 정수 타입의 컬럼을 생서할 때의 주의사항
        5. 자동 증가(AUTO_INCREMENT) 옵션 사용
      3. 날짜와 시간
        1. TIMESTAMP 타입의 옵션
        2. 타임존 등록 사용
      4. ENUM SET
        1. ENUM
        2. SET
      5. TEXT, BLOB
      6. 공간(Spatial) 데이터 타입
        1. POINT 타입
        2. LINESTRING 타입
        3. POLYGON 타입
        4. GEOMETRY 타입
    16. 베스트 프랙티스
      1. 임의(랜덤) 정렬
        1. 지금까지의 구현
        2. 인덱스를 이용한 임의 정렬
      2. 페이징 쿼리
        1. 지금까지의 방법
        2. 불필요한 접근을 제거하기 위한 페이징 쿼리
      3. MySQL에서 시퀀스 구현
        1. 시퀀스용 테이블 준비
        2. 시퀀스를 위한 스토어드 함수
        3. 여러 시퀀스 처리하기
        4. 시퀀스 사용시 주의사항
      4. 문자열 컬럼의 인덱스(해시)
      5. 테이블 파티션
      6. SNS 타임라인 구현
        1. 예제 시나리오
        2. 인덱스 테이블 사용
        3. Try & Fail 쿼리
      7. MySQL 표준 설정
        1. MySQL 표준 설정의 필요성
        2. 표준 설정의 예시
      8. 복제를 사용하지 않는 MySQL 설정
      9. MySQL 복제 구축
        1. MySQL 복제의 형태
        2. 확장(스케일 아웃)
        3. 가용성
        4. 복제가 구축된 MySQL에서의 작업
      10. SQL 작성 표준
        1. 조인 조건은 항상 ON 절에 기재
        2. 테이블 별칭(Alias) 사용 컬럼 명에 테이블 별칭 포함
        3. 서버 사이드 프리페어 스테이트먼트 사용
        4. FULL GROUP BY 사용
        5. DELETE, UPDATE 쿼리에서 ORDER BY ... LIMIT .. 사용 자제
        6. 문자열 리터럴 표기는 홑따옴표만 사용
        7. 서브쿼리는 조인으로 변경
        8. UNION ALL 사용 자제
        9. 스토어드 함수는 가능하면 DETERMINISTIC으로 정의
        10. 스토어드 프로그램에서는 예외 처리 코드를 작성
        11. UPDATE, DELETE 쿼리와 적용 건수(Affected row counts) 체크
        12. 숫자 값은 반드시 숫자 타입의 컬럼으로 정의
      11. 하드웨어와 플랫폼 선정
        1. 하드웨어 선정
        2. 운영체제의 파일 시스템 선정
      12. 백업 모니터링
        1. 백업(EnterpriseBackup mysqldump)
        2. 모니터링
      13. 스키마 검토
    17. 응급 처치
      1. 서버 과부하
        1. 운영체제의 유틸리티를 이용해 장비의 부하 확인
        2. MySQL 서버의 에러 로그 확인
        3. 서버의 프로세스 리스트 확인
        4. 서버의 최대 커넥션 설정 확인
        5. 서버의 슬로우 쿼리 분석
        6. 쿼리의 실행 빈도 확인
        7. 원인별 조치
      2. MySQL 서버 셧다운
      3. MySQL 복구(데이터 파일 손상)
        1. MyISAM
        2. InnoDB
      4. 테이블 메타 정보의 불일치
      5. 복제가 멈췄을
      6. 경고 메시지로 에러 로그 파일이 커질
      7. 바이너리 로그로 디스크가 경우
      8. 마스터 MySQL 서버에서 함수 생성 오류
      9. MySQL DB 변경
      10. DB 테이블 생성 DDL 덤프
      11. mysqldump 결과를 다른 이름의 DB 적재
      12. 테이블이나 레코드의 잠금 해결
      13. InnoDB 잠금 대기 시간 초과
      14. MySQL 서버의 호스트 잠금

    부록A MySQL 5.1(InnoDB Plugin 1.0) 새로운 기능

    1. MySQL 5.1 새로운 기능
      1. 파티션
      2. 레코드 기반의 복제(Row-based replication)
      3. 플러그인 API
      4. 이벤트 스케줄러
      5. 서버 로그 테이블
    2. InnoDB 플러그인 1.0 새로운 기능
      1. InnoDB 빠른 인덱스 생성
      2. InnoDB 데이터 압축
      3. BLOB이나 TEXT 타입 관리
      4. InnoDB 파일 포맷 관리
      5. InnoDB INFORMATION_SCHEMA 테이블
      6. 확장성 개선을 위한 빠른 잠금 처리
      7. 운영체제의 메모리 할당 기능 사용
      8. InnoDB 인서트 버퍼 제어
      9. Adaptive Hash Index 제어
      10. Read Ahead 알고리즘의 개선
      11. 다중 백그라운드 I/O 스레드
      12. 그룹 커밋
      13. 마스터 스레드의 I/O 성능 제어
      14. 더티 페이지의 플러시 제어
      15. Spin loop에서 PAUSE 사용
      16. 버퍼 풀의 관리 기능 개선
      17. 여러 시스템 설정의 동적인 제어
      18. TRUNCATE TABLE 시에 테이블 스페이스 공간 반납
      19. InnoDB 통계 수집을 위한 페이지 샘플링 조절

    부록B MySQL 5.5(InnoDB Plugin 1.1) 새로운 기능

    1. MySQL 서버의 개선 사항
      1. 스레드
      2. 사용자 인증 플러그인 아키텍처
      3. 반동기 복제(Semi-synchronous Replication)
      4. 유니코드 지원 확장
      5. 기본 스토리지 엔진의 변경
      6. SIGNAL RESIGNAL 기능 추가
      7. 파티션 기능 개선
    2. InnoDB 플러그인 1.1 개선 사항
      1. 인덱스 생성 방식 변경
      2. 트랜잭션 복구 성능 향상
      3. InnoDB 성능 진단을 위한 PERFORMANCE_SCHEMA
      4. 다중 버퍼
      5. 다중 롤백 세그먼트
      6. 버퍼 관련 뮤텍스 개선
      7. 인서트 버퍼 처리 개선
      8. 비동기화된 디스크 I/O

    부록C MySQL 5.6 새로운 기능

    1. InnoDB 테이블을 위한 텍스트 검색
    2. InnoDB 리두 로그 파일 크기
    3. 언두 테이블 스페이스
    4. InnoDB 버퍼 풀의 자동 워밍
    5. InnoDB 페이지 크기 조정
    6. 멀티 스레드 슬레이브
    7. Memcached 위한 NoSQL 확장

반응형