Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r-tree index가 있으나 사용하지 못했던 쿼리 개선, N+1 문제 해결 등으로 1s에서 100ms로 응답시간 개선 #128

Merged
merged 1 commit into from
Dec 11, 2023

Conversation

byeolhaha
Copy link
Member

구현 내용

기존 학원 목록 조회에서 r-tree를 이용함에도 응답시간이 1s가 발생하는 문제가 있었습니다.
이를 해결하기 위해서

  • academy-categories와의 N+1 문제를 inner join을 통해 해결하였으나 풀테이블 스캔이 발생하여 4만개의 row를 읽었습니다.
    따라서 이 문제를 해결하고자 CREATE INDEX idx_academy_id ON academy_categories ( academy_id );를 통해 인덱스를 만들었고 9개의 row를 읽도록 개선하였습니다.
  • 또한 Facade에서 regions 를 불러와 요청하는 위,경도가 어떤 지역에 포함되는지 조회하는 쿼리가 있는데 이 부분에서 큰 병목 현상이 발생하여 응답시간이 계속 1s에서 벗어나지 못하는 문제가 발생하였습니다. 따라서 multipolygon에 대한 r-tree인덱스를 만들었습니다. 그러나 기존 쿼리에서 만들어진 r-tree index를 사용하지 못하고 테이블 풀 스캔이 발생하여 쿼리를 수정하였습니다.
#before
SELECT
    code,
    sido,
    sigungu,
    upmyeondong,
    area,
    point 
FROM
    regions  
WHERE
    ST_CONTAINS(area, ST_SRID(Point(127.1388684, 37.4449168), 4326))=1;

image

#after
SELECT
    code,
    sido,
    sigungu,
    upmyeondong,
    area,
    point 
FROM
    regions  
WHERE
    ST_CONTAINS(area, ST_SRID(Point(127.1388684, 37.4449168), 4326));

image

@byeolhaha byeolhaha self-assigned this Dec 10, 2023
Copy link
Contributor

@onetuks onetuks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 별님!

근데 왜 ST_Contains 함수는 등호 붙일 때 R 트리 적용이 안 되는 걸까요?

@byeolhaha
Copy link
Member Author

그 이전에도 비슷한 문제를 겪었는데 그 때도 끝에 있는 비교조건문 1이 문제였습니다.
R-트리 인덱스는 뒤에 있는 비교 조건문이 붙으면 사용이 되지 않는 것 같은데 이유는 잘 모르겠어요.

검색했을 때 나오지 않는 문제라서 저도 이것저것 고치다가 우연히 발견하게 되었습니다.
like %검색어%와 비슷한 흐름으로 보입니다.

@byeolhaha byeolhaha merged commit 0e330a6 into develop Dec 11, 2023
1 check passed
@byeolhaha byeolhaha changed the title r-tree index가 있으나 사용하지 못했던 쿼리 개선, N+1 문제 해결 등으로 1s에서 500ms로 응답시간 개선 r-tree index가 있으나 사용하지 못했던 쿼리 개선, N+1 문제 해결 등으로 1s에서 100ms로 응답시간 개선 Dec 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants