"사전 로딩"의 두 판 사이의 차이

38번째 줄: 38번째 줄:


==같이 보기==
==같이 보기==
* [[N+1 쿼리 문제]]
{{z컬럼3|
* [[게으른 로딩]]
* [[ORM]]
* [[ORM]]
* [[eager]]
* [[eager]]
* [[로딩]]
* [[로딩]]
* [[지연 로딩]]
* [[N+1 쿼리 문제]]
}}


==참고==
==참고==

2020년 8월 1일 (토) 00:25 판

1 개요

eager loading
eager 로딩, 이거 로딩, 이른 로딩, 즉시 로딩, 사전 로딩, 선행 로딩, 열정적 로딩
  • 로딩시 참조해야 하는 정보를 미리 명시하는 일
  • N+1 쿼리 문제의 해결을 통해 성능 향상
  • ORM 활용시 흔히 발생할 수 있는 N+1 문제 해결 가능
  • 지연 로딩의 반대개념이다.

2 예시: 라라벨

N+1 쿼리 상황
foreach (Book::all() as $book)
{
    echo $book->author->name;
}
Book::all()에는 author 정보가 없어서 Book 건수만큼 쿼리 추가 수행 (1+N회)
SELECT * FROM books;
SELECT * FROM authors WHERE id=1;
SELECT * FROM authors WHERE id=2;
SELECT * FROM authors WHERE id=3;
... (생략)
eager 로딩 적용
foreach (Book::with('author')->get() as $book)
{
    echo $book->author->name;
}
Book::with('author')에서 author 정보를 사용하겠다고 미리 알려줌으로써 쿼리 최소화 (2회)
SELECT * FROM books;
SELECT * FROM authors WHERE id IN (1, 2, 3, ...);

3 같이 보기

4 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}