쿼리 실행 계획

유수민·2022년 7월 11일

지식창고

목록 보기
31/65

📌실행계획이란?

실행계획이란 사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업 절차이다. 즉, 'SQL을 데이터베이스에서 어떻게 처리하여 데이터를 가져올것인가?’를 예상하는 계획표이다. SQL이 실행되는데 필요한 cost를 계산하고 그 cost를 통해 어떤 방식으로 실행하는 것이 가장 좋은지를 판단하여. SQL이 데이터베이스에 전달되면 데이터베이스는 여러 단계를 거쳐서 해당 SQL을 어떤 순서와 방식으로 처리할 것인지 계획을 세우게 된다

  • 옵티마이저가 쿼리의 최적 실행 방법을 결정하여 나타내는 쿼리의 동작 계획
  • 작성된 쿼리문의 성능을 파악할 수 있는 DBMS가 지원해주는 정보
  • 작성된 쿼리가 어떤 식으로 동작하는지 내용을 파악할 수 있다

💡 옵티마이저

  • SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리 경로를 생성해주는 DBMS 내부의 핵심엔진
  • DBMS에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하고, 그 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업
  • 옵티마이저(Optimizer)에서 "이 쿼리문을 어떻게 실행시키겠다!"라는 여러 가지 실행계획을 세운다.

📌왜 실행계획을 쓰는가?

  • 디스크 IO와 시간을 감소해 더 효율적인 쿼리문 작성
  • 쿼리문 로직이나 기타 수정할 곳 보완

실행 계획으로 데이터 정렬 방식 또는 사용되는 인덱스 등을 파악해 데이터를 더 신속하게 가져올 수 있게 튜닝할 수 있다.
→ 쿼리 성능 향상에 도움을 준다.

📌SQL문이 처리되는 과정

데이터베이스에서 전달된 SQL문은 파싱 > 최적화 > 실행 과정을 거쳐서 처리된다.

출처) https://coding-factory.tistory.com/743

📖1. SQL파싱 

사용자로부터 요청된 SQL 문장을 잘게 쪼개서 서버가 이해할 수 있는 수준으로 분리한다.

  • 문법 검사 SQL구문에 오류가 있는지, SQL을 실행해야 하는 대상 객체가 존재하는지를 검사
  • SQL을 SQL 파서가 파싱하여 파서 트리(parser tree)를 만듦

📖2. SQL최적화 

파스 트리를 참조하면서 SQL이 실행되는데 필요한 cost를 계산, 실행 계획(Execution Plan) 작성한다 → 옵티마이저에서 처리

  • 불필요한 조건의 제거 및 복잡한 연산의 단순화
  • 여러 테이블의 조인이 있는 경우 어떤 순서로 테이블을 읽을지 결정
  • 각 테이블에 사용된 조건과 인덱스 통계 정보를 이용해 사용할 인덱스 결정
  • 가져온 레코드들을 임시 테이블에 넣고 다시 한번 가공해야 하는지 결정

옵티마이저에 의한 SQL최적화가 끝나면, 실행계획(Execution Plan)이 완성된다.

📖3. SQL실행 

실행 계획(Execution Plan)을 바탕으로 메모리상에서 데이터를 읽거나 물리적인 공간에서 데이터를 로딩하는 등의 작업을 한다.
→ 실행엔진(Query Execution Engine)에서 수행함.

조회하기 위해 실제 데이터를 보관하는 스토리지 엔진과 지속적으로 API Call을 주고 받는다.

profile
배우는 것이 즐겁다!

0개의 댓글