CS/데이터베이스
Deferred Join이란? - 실습편
Junuuu
2023. 11. 1. 00:01
728x90
개요
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의 성능을 보여줍니다.
이론보다는 아니지만 순차적으로 성능이 개선된 모습이 보입니다.