select_related & prefetch_related


select_related์™€ prefetch_related๋Š” ํ•˜๋‚˜์˜ QuerySet์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ,

๋ฏธ๋ฆฌ related_object๋“ค ๊นŒ์ง€ ๋‹ค ๋ถˆ๋Ÿฌ์™€์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋น„๋ก query๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ธด ํ•˜์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋ถˆ๋Ÿฌ์˜จ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ โ€˜cacheโ€™์— ๋‚จ์•„์žˆ๊ฒŒ

๋˜๋ฏ€๋กœ DB์— ๋‹ค์‹œ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ DB์— ์ ‘๊ทผํ•˜๋Š”

์ˆ˜๋ฅผ ์ค„์—ฌ, ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผœ์ค€๋‹ค๋Š” ์ธก๋ฉด์—์„œ๋Š” ๊ณตํ†ต์ ์ด ์žˆ์ง€๋งŒ, ๊ทธ ๋ฐฉ์‹์—๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.



๐Ÿ’ก ์ฐจ์ด์ 

select_related๋Š” SQL์˜ JOIN ์„ ์‚ฌ์šฉํ•˜๋Š” ํŠน์„ฑ์ƒ Foreign Key, one-to-one ํ•„๋“œ์—์„œ๋งŒ

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. select_related๋Š” ํ•˜๋‚˜์˜ Query๋งŒ์œผ๋กœ related_objects๋“ค์„ ๋‹ค ๊ฐ€์ ธ์˜จ๋‹ค.


prefetch_related์˜ ๊ฒฝ์šฐ์—๋Š” ์™ธ๋ž˜ํ‚ค, 1:1 ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ N:M, N:1 ๋“ฑ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

๊ฐ€๋Šฅํ•˜๋‹ค. prefetch_related๋Š” ์›๋ž˜ main Query๊ฐ€ ์‹คํ–‰๋˜๊ณ , ๋ณ„๋„์˜ query๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๋‹ค์‹œ๋งํ•ด, selected_related ๋ณด๋‹ค DB์ ‘๊ทผ ์ˆ˜๊ฐ€ 1๋ฒˆ ๋งŽ๋‹ค.



๐Ÿ“š Reference

โ–ช ๋ธ”๋กœ๊ทธ