2014-09-24 3 views
3

제네릭 방식을 사용하여 너무 많은 조인을 피하는 방법에 대해 여러분의 도움을 부탁드립니다. 이것에 대한 일반적인 규칙이 있습니까?너무 많은 조인을 피하는 방법은 무엇입니까?

현재 11 개의 테이블을 결합하는 매우 복잡한 쿼리가 있으며 성능은 매우 낮습니다 (인덱스 및 업데이트 된 통계 포함). Entity Framework Profiler를 사용하여 조인 횟수를 줄이고 대신 여러 개의 별도 쿼리를 수행하는 제안을 받았습니다. link. 각 가입

추가 작업을 수행하기 위해 데이터베이스를 필요로하며, 쿼리의 복잡성과 비용은 각각의 추가 가입으로 빠르게 성장한다. 관계형 데이터베이스는 조인 처리에 최적화되어 있지만 은 여러 조인이있는 단일 쿼리 대신 여러 개의 별도 쿼리를 수행하는 것이 더 효율적입니다.

더 나은 성능을 얻으려면 어떻게해야합니까?

select * 
from Blogs blog0_ 
     inner join Posts posts1_ 
     on blog0_.Id = posts1_.BlogId 
     inner join Comments comments2_ 
     on posts1_.Id = comments2_.PostId 
     inner join Users user3_ 
     on posts1_.UserId = user3_.Id 
     inner join UsersBlogs users4_ 
     on blog0_.Id = users4_.BlogId 
     inner join Users user5_ 
     on users4_.UserId = user5_.Id 
+3

적절한 인덱스가 있다고 가정 할 때 쿼리가 괜찮을 수도 있습니다. 이 링크는 오도 된 것입니다. –

+0

형제 사이트에 더 적합합니다. Codereview –

+3

조인은 실제로 SQL Server에서 수행 할 수있는 더 저렴한 작업 중 하나입니다. 문제를 일으킬 수있는 결과 레코드의 양입니다. –

답변

2

최소화하기 위해 몇 가지 방법이 있습니다 (최적화)는 테이블 결합의 수 : -

  • 테이블이 필요 당신이 원하는 어떤 확인합니다.
  • 또한 표가 정규화 된 형식인지 확인하십시오.

캡슐화의 일부는 사용하여 조인 -

  • 조회수
  • 을 임시 테이블을 사용하여 CTE
  • 를 사용

    당신은 링크 에서 CTE에 대한 자세한 내용 및 임시 테이블을 찾을 수 있습니다 Common Table Expression, View. 임시 테이블의 경우 테이블 이름 앞에 "#"을 추가하고 조인에서 원하는 데이터를 삽입 한 다음 나중에 같은 세션에서 사용하십시오.

  • 관련 문제