
MySQL 쿼리 개선기 - 인덱스를 활용한 정렬보다 Using temporary, Using filesort가 더 빠르다고?
·
우테코/팀 프로젝트 - 투룻
개요개선을 경험한 내용을 공유하고자 합니다. 프로젝트에서 쿼리 성능을 개선하기 위해 `GROUP BY`와 `JOIN`의 순서를 바꿔 NL(Nested Loop) JOIN의 드라이빙 테이블 크기를 줄이고, 인덱스를 활용한 정렬이 깨지지 않도록 개선하였습니다. 그리고 서브 쿼리에서 커버링 인덱스를 적용했습니다. 최종적으로 `GROUP BY` + `HAVING` 을 여러 개의 `JOIN` 으로 변환해 임시 테이블 없이 인덱스를 더 잘 활용하도록 개선하였습니다. 이 과정을 통해 **쿼리 성능을 최대 722배 개선**할 수 있었습니다.이 글에서는 정렬 시 인덱스를 활용하는 것이 중요하지만, 드라이빙 테이블의 크기가 쿼리 성능에 미치는 영향이 더 클 수 있다는 사실을 다룹니다. 또한 커버링 인덱스에서 복합 인덱스..