수천 건 이상의 데이터를 읽은 후 MAX/MIN 함수를 통해 최종 또는 최초 이력을 얻는 것이 당연할 수도 있겠지만, 다양한 방법을 통해 최종 또는 최초 데이터에 직접 도달하는 효율적인 방안이 있을 수 있다.
개선 전
- (문제 상황) 넓은 범위의 데이터를 액세스함(그룹핑 전까지 12천건, 그룹핑 후에도 3.4천건)
개선 방안
- (문제 원인) 작성된 SQL 로직과 트레이스 결과를 분석해 보면, 거래상세 테이블에서 계좌별 최종 이력 데이터 1건만 액세스하는 것이 아니라, 계좌의 모든 이력을 액세스하고, GROUP BY 구문을 통해 최종 이력 데이터를 선택했음을 알 수 있음
- (개선 방안) 계좌별 최종 이력 데이터 1건만 액세스하도록 로직을 개선함
개선 후
- (개선 결과) 최종 순번 찾는 로직 부분의 액세스량이 개선 전보다 현저히 감소함
- 참고로 수정 후와 같이 SQL을 작성하고, 조건에 부합하는 인덱스가 있으면, ‚INDEX RANGE SCAN (MIN/MAX)와 FIRST FOW‛ 오퍼레이션이 등장함
잘 봤습니다
답글삭제