select_related & prefetch_related
๐ก select_related & prefetch_related
select_related์ prefetch_related๋ ํ๋์ QuerySet์ ๊ฐ์ ธ์ฌ ๋,
๋ฏธ๋ฆฌ related_object๋ค ๊น์ง ๋ค ๋ถ๋ฌ์์ฃผ๋ ํจ์์ด๋ค.
๋น๋ก query๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค๊ธด ํ์ง๋ง, ๊ทธ๋ ๊ฒ ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ โcacheโ์ ๋จ์์๊ฒ
๋๋ฏ๋ก DB์ ๋ค์ ์ ๊ทผํด์ผ ํ๋ ์๊ณ ๋ฅผ ๋์ด์ค ์ ์๋ค. ์ด๋ ๊ฒ ๋ ํจ์ ๋ชจ๋ DB์ ์ ๊ทผํ๋
์๋ฅผ ์ค์ฌ, ์ฑ๋ฅ์ ํฅ์์์ผ์ค๋ค๋ ์ธก๋ฉด์์๋ ๊ณตํต์ ์ด ์์ง๋ง, ๊ทธ ๋ฐฉ์์๋ ์ฐจ์ด์ ์ด ์๋ค.
๐ก ์ฐจ์ด์
1. select_related
select_related๋ SQL์ JOIN
์ ์ฌ์ฉํ๋ ํน์ฑ์ Foreign Key, one-to-one ํ๋์์๋ง
์ฌ์ฉ ๊ฐ๋ฅํ๋ค. select_related๋ ํ๋์ Query๋ง์ผ๋ก related_objects๋ค์ ๋ค ๊ฐ์ ธ์จ๋ค.
2. prefetch_related
prefetch_related์ ๊ฒฝ์ฐ์๋ ์ธ๋ํค, 1:1 ๋ฟ๋ง ์๋๋ผ N:M, N:1 ๋ฑ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
๊ฐ๋ฅํ๋ค. prefetch_related๋ ์๋ main Query๊ฐ ์คํ๋๊ณ , ๋ณ๋์ query๋ฅผ ์คํํ๋ค.
๋ค์๋งํด, selected_related ๋ณด๋ค DB์ ๊ทผ ์๊ฐ 1๋ฒ ๋ง๋ค.
๐ Reference
โช ๋ธ๋ก๊ทธ