Inflearn brand logo image

인프런 커뮤니티 질문&답변

bebe님의 프로필 이미지
bebe

작성한 질문수

김영한의 실전 데이터베이스 - 기본편

CASE 문 - 조건부 집계1

배치 처리 방식과 파이프라인 처리 방식

해결된 질문

작성

·

64

·

수정됨

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
안녕하세요 영한님! 데이터베이스 입문/기본편 강의에서 GROUP BY, 집계함수, CASE 문 등을 배우고 공부하면서, DBMS에서 레코드를 읽고 표현식을 처리하는 내부 과정에 대해 관심을 갖게 되었습니다.

이번 강의에 조건부 집계 같은 나름 복잡한? 쿼리를 이해하려고 노력하면서 몇 가지 궁금증이 떠올랐습니다.

 

질문1) 배치 처리 방식 vs 파이프라인 처리 방식

영한님의 자바 고급편 강의에서, 데이터 요소들의 처리하는 방식에는 파이프라인 방식과, 배치 처리 방식이 있다고 하셨던 부분이 떠올랐습니다.

 

데이터베이스 쿼리의 논리적 순서는 FROM -> WHERE -> (GROUP BY -> HAVING -> ) SELECT -> .... 과정으로 이뤄지는데,

 

실제 DBMS에서는 FROM 절 -> WHERE 절 배치처리 -> SELECT 절 배치처리 이런 과정으로 이뤄지는지,

아니면 레코드 하나를 단위로 FROM -> WHERE -> SELECT 파이프라인을 거쳐 처리가 되는 것인지 궁금합니다.


질문 2) GROUP BY와 집계 함수 처리 시점

COUNT()나 SUM()과 같은 집계함수는 select 절에 존재하고, 쿼리의 논리적 순서에 따르면 GROUP BY 다음 SELECT 절이 실행되는데요. (HAVING 제외)

 

실제로는 GROUP BY를 실행하면서 SELECT 절에서 필요한 집계 값을 누적시키는지,

아니면 특별한 자료구조에 그룹별로 레코드를 모아두고 SELECT절 수행 시점에 집계함수 값을 얻어내는건지 궁금합니다.

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. bebe님

SQL의 논리적 처리 순서와 실제 DBMS 내부 실행 방식은 꽤 차이가 있습니다.

질문하신 부분은 데이터베이스 마다 다르고, 또 각 데이터베이스의 구현 알고리즘, 그리고 최적화 방식에 따라서 달라집니다. 일반적인 내용으로 답을 드리자면 다음과 같습니다.

대부분은 파이프라인 처리로 효율적으로 흘려보내고,

특정 연산(GROUP BY, DISTINCT, ORDER BY, 집합 연산 등)은 중간 버퍼(임시 자료구조)를 사용해 사실상 배치 처리처럼 동작합니다.

파이프라인 처럼 흘려보내는 덕분에 데이터베이스에서 다음과 같은 쿼리는 즉시 10개의 데이터를 빠르게 반환하고 끝낼 수 있습니다.

select * from member limit 10

 

추가로 GROUP BY 수행 도중에 집계 함수도 동시에 처리된다고 보시면 됩니다.

감사합니다.

bebe님의 프로필 이미지
bebe

작성한 질문수

질문하기