쿼리 실행 계획

유수민·2022년 7월 11일
0

지식창고

목록 보기
31/64

📌실행계획이란?

실행계획이란 사용자가 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개의 댓글