본문 바로가기
쿼리튜닝

group by 성능 튜닝

by Ssun's 2022. 2. 20.

group by절은 테이블 스캔 후 결과를 임시테이블에 넣어 집계를 하는 과정을 거침.

데이터의 양이 많아질 수록 속도가 느려짐.

index 생성으로 임시테이블 생성없이 빠르게 데이터를 가져올 수 있음       

 

select seq
        ,yyyymm
        ,max(score)
from tb_test_score
group by seq,yyyymm;

-> group by 컬럼 순서와 인덱스 컬럼 순서가 동일해야함

-> max, min 함수에 쓰이는 컬럼도 인덱스에 들어가야 함

 

 

처음엔 위와 같은 쿼리의 실행속도가 느릴 때 인덱스 ix_test_score(seq, yyyymm) 생성 했을 때 오히려 속도가 느려졌다.

인덱스를 ix_test_score(seq, yyyymm, score)로 max함수에 쓰이는 컬럼까지 포함하여 재생성 했을 때 실행속도가 훨씬 빨라지는 것을 알 수 있었다.

 

min, max 등의 함수에 쓰이는 컬럼을 포함하여 인덱스를 생성하면 제일 작은 score/ 제일 큰 score 하나만 스캔함

 

 

 

 

 

반응형

댓글