본문 바로가기

SQL/MySql

쿼리 실행 절차 및 옵티마이저 종류

쿼리 실행 절차

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