배치 처리 방식과 파이프라인 처리 방식
[질문 템플릿]
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 수행 도중에 집계 함수도 동시에 처리된다고 보시면 됩니다.
감사합니다.
간단한 오타 제보입니다.
0
21
1
ON을 명시하지 않았을 경우 질문드립니다.
0
64
1
강의 2:53 union을썼는데도 션이 중복
0
61
1
where 대신 having을 써도 되나요?
0
85
1
주문 내역에 대한 고객 데이터
0
67
2
in 수행
0
46
1
외부조인1 강의 관련 질문
0
77
3
커버링 인덱스와 랜덤i/o 질문
0
73
1
오타인거죠?
0
82
1
섹션 3 퀴즈 3번 문제
0
79
2
GROUP BY 기준 컬럼
0
89
1
질문이 있습니다
0
58
1
오타
0
84
2
실제 상용 서비스 질문
0
101
1
파티셔닝 관련 질문입니다.
0
63
1
join 문제 풀이2 문제1(self join) 질문
0
68
1
9. 인덱스2.pdf 중에서
0
82
1
문제 2번
0
69
2
문제와 풀이1 - 3번 문제
-1
73
2
잘 사용하진 않지만 풀 외부 조인을 사용하신 사례가 궁금합니다!
0
97
1
[58. 인덱스와 정렬]을 듣다가 질문입니다.
0
98
2
두개 이상의 테이블을 조인할때 인덱스 질문이 있습니다.
0
62
1
파일을 만드는 단위가 궁금해요
0
76
1
MySQL은 실무에서 사용하는 케이스도 있을까요?
0
87
1





