우선 네트워크 속도 차이 및 제 개인 맥북으로 테스트를 하는 것이기 때문에 성능개선에 대해서 차이가 존재함을 말씀드립니다.
데이터가 쌓여 수천, 수만건이 되는 경우 특정 필터들을 걸어 데이터를 조회하는 것은 굉장히 비효율적입니다. 결국은 Full-scan
을 통해서 데이터 목록을 조회하기 때문입니다.
이는 실제 사용자 경험(UX)에 직접적인 영향을 끼치는 부분입니다. 따라서 이를 개선하며 테스트하고 최종적으로는 어떤 방식을 사용했는지 작성해보겠습니다.
모임 목록을 조회할 때는 몇가지 필터를 적용할 수 있습니다. 사용하는 필터는 category_id
, is_deleted
, status
, meetingDate
, title
등을 필터로 걸 수 있습니다. 위 작성한 상황처럼 데이터의 양이 많아지는 경우 점점 조회의 효율성은 떨어질 것이기 때문에 인덱스를 활용하여 개선 및 테스트를 진행했습니다.
인덱스는 데이터를 가지고 있는 것이 아닌 데이터의 위치를 가지고 있는다라고 생각하면 좋을 것 같습니다.
이는 인덱스 (Mysql기반)는 내부적으로 별도의 자료구조 형태(B+Tree)를 기반으로 만들어져있기 때문입니다.
따라서 원하는 데이터를 바로 찾을 수 있게 됩니다.
우선 테이블에 인덱스를 적용시킵니다. 위 조건에서 title
은 Like 구문을 통해 조회하게 되는데 Like 구문은 인덱스를 이용할 수 없기 때문에 제외합니다.
INDEX idx_meeting_deleted_category_status_date (is_deleted, category_id, status, meeting_date)