-
Deferred Join이란? - 실습편CS/데이터베이스 2023. 11. 1. 00:01
개요
Deferred Join이란?-이론 편에 이어 직접 데이터를 세팅하고 성능이 얼마나 개선되는지 확인하는 실습을 진행해보고자 합니다.
Spring Boot를 활용한 50만건의 데이터 세팅
@Component class SettingData( private val memberJpaRepository: MemberJpaRepository, ): ApplicationRunner{ override fun run(args: ApplicationArguments) { repeat(500_000){ memberJpaRepository.save(MemberEntity(name = "test$it")) } } }
어떤 방식으로 데이터를 적재하던 상관없습니다.
쿼리문에 따른 실행계획과 성능을 살펴보기 위해 50만 건의 데이터를 적재하였습니다.
전통적인 페이징 실행계획
EXPLAIN ANALYZE SELECT * FROM member ORDER BY member_id, birth_day LIMIT 20 OFFSET 450000;
280ms 정도 소요됩니다.
Deferred Join 적용된 실행계획
EXPLAIN ANALYZE SELECT * FROM member INNER JOIN ( SELECT member_id FROM member ORDER BY birth_day, member_id LIMIT 20 OFFSET 450000 ) AS member2 USING (member_id) ORDER BY member_id, birth_day;
150ms 정도 소요됩니다.
약 2배정도 속도가 개선되었습니다.
커버링 인덱스를 충족시키기 위해 인덱스 추가
CREATE INDEX index_name ON member (birth_day);
Deferred Join Query의 실행계획을 다시 보면 100ms의 성능을 보여줍니다.
이론보다는 아니지만 순차적으로 성능이 개선된 모습이 보입니다.
'CS > 데이터베이스' 카테고리의 다른 글
Outer Join 주의사항 (0) 2023.12.06 CQRS 패턴이란? (0) 2023.11.09 Deferred Join이란? - 이론편 (0) 2023.10.28 PostgreSQL 데드락 발생시키기 (0) 2023.08.23 Hard Delete와 Soft Delete (2) 2023.07.17