쿼리 실행 절차
1. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MYSQL 서버가 이해할 수 있는 수준으로 분리
2. SQL 파싱 정보를 확인 하면서 어떤 테이블로 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택
3. 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로 부터 데이터를 가져옴.
두번째 단계는 첫 번째 단계에서 만들어진 파스트리를 참조하면서 다음과 같은 내용 처리
- 블필요한 조건의 제거 및 복잡한 연산의 단순화
- 여러 테이블의 조인이 있는 경우 어떤 순서로 읽을지 결정
- 각 테이블에 사용된 조건과 인덱스 통계정보를 이용해 사용할 인덱스 결정
- 가져온 레코드들을 임시 테이블에 넣고 다시 한번 가공해야 하는지 결정
옵티마이저 종류
- 비용기반 최적화(Cost-based optimizer, CBO) : 옵티마이저에 내장된 우선순위에 따라 실행계획을 수립
- 규칙기반 최적화((Rule-based optimizer, RBO) : 각 단위 작업의 비용 정보와 대상 테이블의 예측된 통계 정보를 이용해 각 실행 계획별 비용 산출
테이블과 인덱스 통계정보
SHOW TABLE STATUS LIKE 'tb_test'\G
SHOW INDEX FROM tb_test;
통계 정보 갱신
//일반 테이블
ANALYZE TABLE tb_test;
//파티션 테이블
ALTER TABLE tb_test ANALYZE PARTITION p3;
- ANALYZE를 실행하는 동안 MyISAM 테이블은 일기는 가능하지만 쓰기는 안됨
- InnoDB 테이블은 읽기와 쓰기 모두 불가능 함.
- InnoDB 테이블은 인엑스 페이지 중에서 8개 정도만 랜덤하게 선택해서 분석하고 그 결과를 인덱스의 통계 정보로 갱신
MYSQL 5.1.38 이상의 InnoDB 플러그인 버전에서는 분석할 인덱스 페이지 개수를 "innodb_stats_sample_pages" 파라미터로 지정 가능
sudo /usr/sbin/groupadd mysql
스토리지 엔진이란?
'SQL > MySql' 카테고리의 다른 글
Mysql Lock (0) | 2017.11.20 |
---|---|
1부 3장. SQL 소개 (0) | 2017.11.15 |
실행계획 ID 컬럼과 select_type (0) | 2017.11.15 |
실행계획 (0) | 2017.11.15 |
mysql 정렬 (0) | 2017.11.15 |