select_related 와 prefetch_related 의 차이점과 이점

박재용·2020년 12월 7일
0

사용하는 이유
하나의 QuerySet을 가져올때 미리 related objects들까지 다 불러와주는 함수 입니다. 이렇게 불러온 data들은 cache에 남아있게 됩니다 .

cache란 데이터를 임시 저장해두는 장소

cache의 data가 남아있어서 다시 쿼리문을 불러올때 중복되는 쿼리를 안날려도 된다 .

이렇게 가져오는 경우는 크게 2가지이며 select_related , prefetch_related 가 있습니다 .

select_related
one-to-one , foreinkey (1:n , n:1)일때 주로 사용이 가능하며 1번의 쿼리로
related_object로 가져온다 .

prefetch_related
many-to-many , foreign-key 등을 가리지 않고 사용이 된다 총 쿼리가 2번 실행되며 객체를 먼저 조회 한후 Python에서 Join 하여 줍니다 .

차이점
select_related는 one-to-one , foreinkey (1:n , n:1) 일때 밖에 사용이 불가하다 . 반면 prefetch_related는 두 객체를 각각 쿼리문을 날린후 Python 자체에서 join해주므로 many-to-many 관계도 cache에 담을수 있다 .

참조- https://velog.io/@junnoli/%EB%A9%B4%EC%A0%91-%EC%8A%A4%ED%84%B0%EB%94%94-1

profile
박재용이란 사람이 복습을 하기위해 만든 벨로그 입니다 . 잘부탁드려요

0개의 댓글