홍보 / 광고

  • (SQL학원/SQL교육) 마리아DB(MariaDB) & MySQL 기초 및 SQL 활용 재직자 향상과정

[SQL학원/SQL교육]


마리아DB(MariaDB) & 

MySQL 기초 및 SQL 활용 재직자 향상과정

(주말반)


33c1e934cb09a86782d48b3a2704eb76_1528163

★ 교육개요 ★

본 과정은 단기간에 MariaDB에 대한 설치 및 설정 부터 기초 쿼리 활용 능력, 서브쿼리, 조인, 쿼리최적화방법, 스토리지 엔진, SQL 실행계획의 분석까지 배울 수 있는 실무/실습위주의 교육 입니다. MySQL이 오픈 코어 방식의 상용화를 도입하면서 일부 기능들이 오픈 소스에서 누락되기 시작했는데, 다행히 MariaDB 서버가 그 자리를 조금씩 메워주고 있습니다. MySQL 엔터프라이즈 버전에만 사용 가능한 상용 기능들을 MariaDB를 통해서 무료로 사용할 수 있게 된 것이며 또한 MariaDB 사용자도 많이 늘어나면서, 이제 MariaDB는 더는 미완성의 MySQL 변종이 아니라 MySQL 엔터프라이즈 버전과 경쟁하는 안정적인 오픈소스 DBMS가 된 것으로 재직자분들을위해서, MariaDB 10.0과 MySQL 5.6의 각 고유 기능과 공통 기능들을 비교 설명하는 방식으로 구성했으므로 MariaDB와 MySQL의 특성과 기능 차이를 이해하고, 서비스의 특성에 맞게 (MariaDB와 MySQL중에서) 적절한 솔루션을 선택하는 안목을 키울 수 있을 것이라 확신합니다.

★ 교육목표 ★

- 관계형 데이터베이스에서 SQL을 사용하여 목적에 적합한 데이터를 정의하고, 조작하며, 제어
- 테이블의 구조와 제약조건을 생성, 삭제하고 수정하는 DDL(Data Definition Language) 명령문을 작성.
- 한 개의 테이블에 대해 데이터를 삽입, 수정, 삭제하고 행을 조회하는 DML(Data Manipulation Language) 명령문을 작성.
- 업무단위인 트랜잭션의 완료와 취소를 위한 DCL(Data Control Language) 명령문을 작성.
- 생성된 테이블의 목록, 테이블의 구조와 제약조건을 파악하기 위해 데이터사전을 조회하는 명령문을 작성.
- 테이블 조회 시간을 단축하기 사용하는 인덱스의 개념을 이해하고 인덱스를 생성하는 DDL(Data Definition Language)명령문을 작성.
- 먼저 생성된 테이블들을 이용하여 새로운 테이블과 뷰를 생성하는 DDL(Data Definition Language)명령문을 작성.
- 조인, 서브쿼리, 집합연산자를 사용하여 두 개 이상의 테이블로부터 데이터를 조회하는 DML(Data Manipulation Language)명령문을 작성.
- 서브쿼리 및 조인의 기초 및 활용
- 서브쿼리 및 조인의 상호변환
- 스키마 객체(테이블, 인덱스, 뷰)에 대한 이해
- MariaDB 및 MySQL의 구조에 대한 이해
- 쿼리 최적화에 대한 이해
- 스토리지 엔진에 대한 이해
- SQL 실행계획에 대한 이해

★ 교육대상 ★

- 초보 및 신입 개발자
- SQL에 관심있는 개발자 또는 학생

★ 커리큘럼 ★
마리아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
0  COMMENTS