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 하나만 스캔함
반응형
댓글