RDB에서 데이터 접근 절차를 결정하는 모듈을 쿼리 평가 엔진
이라고 불린다.
쿼리 평가 모듈
은 파서,옵티마이저,카탈로그 매니저,플랜평가 와 같은 서브 모듈로 구성된다.
1️⃣ 파서 (parser)
: 파서는 구문을 분석한다. SQL 구문을 정형적인 형식으로 변환해준다.
입력한 테이블이 존재하는지, 쉼표 구분이 되어있는지 등
옵티마이저 (optimizer)
: 인덱스 유무, 데이터 분산 또는 편향 정도, DBMS 내부 매개변수 등의 조건을 고려해서 선택 가능한 많은 실행 계획을 작성한 후 2️⃣ , 비용을 연산 3️⃣ 하여 가장 낮은 비용을 가진 실행 계획을 선택한다.
4️⃣ 카탈로그 매니저 (catalog manager)
: DBMS 의 내부 정보를 모아놓은 테이블들로 , 테이블 또는 인덱스의 통계 정보가 저장되어 있다.
옵티마이저가 실행 계획을 세울 때, 옵티마이저에게 중요한 정보를 제공한다.
5️⃣ 플랜 평가 (plan evaluation)
: 옵티마이저가 여러 개의 실행 계획을 세우면 그것을 받아 최적의 실행 결과를 선택하는 것
데이터베이스 사용자로서는 옵티마이저를 잘 사용하는 것이 중요하다.
→실제로 최적의 플랜이 선택되지 않는 경우가 꽤 많기 때문
특히 카탈로그 매니저가 관리하는 통계정보에 대해서는 데이터베이스 엔지니어가 항상 신경을 써야한다.
→ 통계 정보(카탈로그 매니저)가 부족하거나 카탈로그 정보가 테이블 또는 인덱스의 실제와 일치하지 않을 때 문제가 생긴다.
테이블의 데이터가 많이 바뀌면 카탈로그의 통계 정보도 함께 갱신되어야 한다!
→ but, 카탈로그 갱신 실행 비용이 높음, 갱신 시점을 확실하게 검토해서 맞는 시점에 갱신해야한다.
<MySQL DBMS 통계 정보 갱신>
ANALYZE TABLE [스키마 이름].[테이블 이름];