Database ‐ Streaming Aggregation and Pre‐aggregated Tables - thought-corner/backend-roadmap GitHub Wiki
인덱스 정렬 대신 스트리밍 집계는?
- MySQL이
GROUP BY를 처리하는 방식은 크게 3가지로 나뉜다.
| 방식 | 조건 | 메모리 | EXPLAIN 표시 |
|---|---|---|---|
| 임시 테이블 | 입력이 정렬돼 있지 않음 | 그룹 수에 비례 | Aggregate using temporary table |
| 스트리밍 | 입력이 그룹 키 순으로 정렬됨 | 그룹 하나 분량 | Group aggregate: ... |
| 느슨한 인덱스 스캔 | 인덱스 선두 컬럼 + MIN/MAX·DISTINCT류 | 거의 없음 | Using index for group-by |
- 입력이 그룹 키 순으로 들어오면 같은 그룹의 행에 반드시 연속한다. 지금 그룹의 누적값만 들고 있다가 키가 바뀌는 순간 결과를 흘려보내고 상태를 초기화한다.
- 반면 정렬이 안 돼 있으면 같은 값의 행이 마지막 행에도 나올 수 있어서 전부 다 읽을 때까지 모든 그룹의 상태를 들고 있어야 한다. 그래서 임시 테이블이 필요하다.