오늘은 Index에 따른 메인페이지 속도 개선과 Index 생성시 쓰기 성능은 얼마나 떨어지는가에 대한 테스트를 해볼려고 한다.
현재 메인페이지를 조회하는 API는 3개가 있는데 각각은 다음과 같다.
create index idx_post_vote_ratio_vote_count_desc on post (vote_ratio desc, vote_count desc);
create index idx_post_created_at_desc on post (created_at desc);
UPDATE post
SET vote_ratio = 40 + RAND() * 10 where 1=1;
UPDATE post
set vote_count = RAND() * 10000 where 1=1;
조회 성능이 유의미한 개선이 이루어지진 않아서 실행계획을 보기로 했다.
속도가 미약하게나마 개선된 Grill API는 Index를 타지만
New 쿼리는 Index를 타지 않는다. 추측해보건데, PK를 뒤로 읽는거랑 별만 차이가 없어서 그런게 아닐까 싶다.
지금 생각해보니 Page기반 Pagination은 결국 Vote Ratio 기준으로 정렬하는 시간이 줄어들 뿐이지 n 페이지까지 숫자를 세어야 한다는건 똑같다. 하지만 Cursor 기반 페이지네이션은 Cursor까지 인덱스를 타고가서 거기서부터 size만큼 들고오면 되기 때문에 압도적으로 성능이 좋을 수 밖에 없다.