기능을 만들다보면 처음 정해진 사항에서 요구사항이 더 추가되거나 변경되는 경우가 많다. 현재 진행하던 프로젝트에서도 추가적으로 웹 페이지에 보여지면 더 좋을 듯한 정보를 추가하게 되었다. 하지만 쿼리를 변경함으로써 1초도 안걸리던 데이터 조회가 3초 이상이 걸리는 걸 확인하였다. 데이터 확인이 중요했던 터라 우선은 쿼리를 적용하였지만 초당 데이터를 조회해 확인해야 하는 페이지였기 때문에 쿼리 수정이 불가피하였다. 해당 포스팅은 쿼리의 성능을 향상시킬 때 어떻게 튜닝을 하면 될지에 대한 가이드라인으로 작성하였다.(미래의 나를 위해서 말이다.) 아래의 내용들은 어디까지나 참고용이고, 성능의 저하는 다른 방식으로 발생할 수 있다. SELECT시에 필요한 컬럼만 불러오기 -- Inefficient SELECT ..
프로젝트를 진행하면서 여러 테이블에서 정보를 한 번에 select 해와야 하는 기능을 추가하게 되었다. 초마다 데이터를 select 해와야하기 때문에 빠른 쿼리 조회가 중요한데 조회 쿼리를 실행해보니 한번 데이터를 select 하는데 6초가 걸렸다. 문제가 있다는 걸 확인했으니 원인이 무엇인지 찾으며 쿼리의 실행 속도를 향상시키기 위한 튜닝을 시작했다. 그 과정에서 분명 index가 있는 테이블임에도 불구하고 Index Scan이 아닌 Full Scan(Seq Scan)이 실행되는 것을 확인하였고, 이러한 경우는 어떻게 발생할 수 있는지 정리하였다. Index란 데이터베이스에서의 Index도 우리가 흔히 아는 책에 표시하는 인덱스 라벨과 동일한 역할을 하는 자료구조이다. 추가적인 쓰기 작업과 저장 공간을..