슬로우 쿼리 개선

1. CSM / RSM 조회

1.1. 배경

배경
Nested Loop Join에서 대부분의 Cost 발생
조인이 여러 번 중첩(Nested)되면서 루프 횟수가 많아져 비효율적으로 동작
각 단계별로 반복적으로 인덱스 룩업과 필터링이 수행되면서 성능 저하를 유발

1.2. 개선 내용

복합 인덱스 추가
CREATE INDEX idx_cdc_curriculum_deleted_order ON custom_daily_curriculum (custom_curriculum_id, deleted_at, order_id); CREATE INDEX idx_rsm_cdcid_deleted_status_order ON replica_study_module (custom_daily_curriculum_id, deleted_at, status, order_id);
SQL
복사
근본적으로 발생하는 Nested Loop Join에서 대부분의 Cost는 개선되지 않음
평균 1200ms 소요
인덱스를 추가하더라도 Nested Loop Join은 개선되지 않음. 근본적으로 쿼리 양을 줄일 수 있는 방법 제안
정책적 개선 방향
빈 목록은 공개 설정이 불가능하도록 처리
CSM 상태 업데이트 mutation에서, 빈 목록인지를 판단
빈 목록이 이미 존재하는지 확인 필요
FE 처리 방향
비워져 있는 목록으로 이동되었을 때 오류가 나지 않고, Empty 상태를 보여줄 수 있도록 처리

2. Group User 쿼리

2.1. 배경

배경
group_id 인덱스와 user_type 인덱스를 각각 따로 사용한 뒤, Intersect 연산중

2.2. 개선 내용

group user 테이블에 group_id, user_type, deleted_at 복합 인덱스 구성
CREATE INDEX idx_group_user_relation_group_id_user_type_deleted_at ON group_user_relation_tbl (group_id, user_type, deleted_at);
SQL
복사

3. SAI id / type 쿼리

3.1. 배경

배경
모든 인덱스가 FK 인덱스만 사용중

3.2. 개선 내용

RSA 테이블에 replica_study_unit_id, deleted_at, order_id 복합 인덱스 추가
CREATE INDEX idx_rsa_unit_deleted_order ON replica_study_activity (replica_study_unit_id, deleted_at, order_id);
SQL
복사
RSA 커버링 인덱스로 쿼리 가능
WIP