블로그 이미지
따시쿵

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2015. 8. 11. 11:39 C# with LINQ to SQL

 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 을 이용할 때의, 쿼리 프로파일러를 이용해서 화면을 캡쳐한 내용입니다. 

 

 

 

posted by 따시쿵