lazy loading의 쿼리 횟수는 Categories 데이타의 N + 1 select 를 수행합니다.
위의 예제에서는 두 테이블간에 one-to-many 의 관계로 이루어져 있으며, Categories 데이타는 하나 혹은 그 이상의 Products 테이타를 가지고 있습니다.
Categories 테이블에는 8개의 데이타가 있으며, Products 테이블에는 77개의 데이타가 있습니다.
모든 Categories 테이블의 데이타를 반복적으로 추출하기 위해서는 foreach 문을 이용해서 Categories 테이블을 스캔합니다. 모든 Products 의 리스트를 출력하기 위해서는 LINQ to SQL 에서는 기본적으로 다음의 구문을 따릅니다.
select * from Categories
/* For each Categories */
select * from Products where CategoriesID = x
이것이 의미하는 것은, Categories 테이블에 대해 한 번의 select 문이 수행하고, Products 테이블에 대해 N 번의 select 문 수행이 이루어진다는 것입니다. 여기서 N 은 Categories 테이블의 데이타 개수입니다. 따라서 총 select 실행 횟수는 N + 1 입니다.
시스템의 구조나 쿼리문이 적용되는 곳이 어디냐에 따라 두 가지 모두 적재적소에 사용하면 되는 것이지만, eager loading 을 이용하면 한 번의 쿼리문으로 모든 데이타를 추출 할 수 있으며 어플리케이션 성능 향상을 위해서 cache 기능을 적절히 이용하여 사용 할 수 있습니다.
lazy loading 을 이용할 때의, 쿼리 프로파일러를 이용해서 화면을 캡쳐한 내용입니다.
'C# with LINQ to SQL' 카테고리의 다른 글
Eager loading (0) | 2015.08.10 |
---|---|
Lazy loading (0) | 2015.08.07 |
SqlMetal 을 이용해서 dbml 파일 만들기 (0) | 2015.07.15 |
LINQ - out 파라미터를 이용한 스토어드 프로시저 이용 (0) | 2015.07.09 |
LINQ - 스토어드 프로시저를 이용한 insert, update, delete 연산 (0) | 2015.07.07 |