2011-10-24 3 views
6

여러 개의 INNER JOIN이있는 VIEW가 있지만 해당 VIEW에 대해 쿼리를 수행하면 주 테이블에서 오는 열만 선택됩니다. SQL Server는 실행 중 또는 VIEW에서 불필요한 조인을 무시합니다. 웬일인지 아직도 일어날 필요가 있니?SQL Server보기 성능

다른 경우 SQL Server 2008 R2에 있습니다. 두 가지 경우 모두 이것이 이미 훌륭한 해결책이 아니라는 것을 알고 있습니다. 그러나 나는 2 가지 악 중 적은 것을 찾으려고합니다.

답변

3

은 실제로 의미를 변경하지 않으면 조인을 무시합니다. 한 예로 테이블 사이에 신뢰할 수있는 외래 키 제약 조건이 있고 참조하는 테이블 (See example 9 in this article)의 열만 선택하는 경우 일 수 있습니다.

특정 사례에 대해 실행 계획을 확인해야합니다.

+1

멋진 기사, 내가 뭘 찾고 있었는지, 고마워. 짐작할 수 있듯이, 내가이 질문을하는 첫 번째 장소에서이 DB의 FK 관계는 사실상 존재하지 않습니다. 이제 왜 옵티마이 저가 기본적으로이 시나리오에서 나를 도와 줄 기회가 없는지 알 수 있습니다. 그리고 실행 계획에서 같은 것을 제안합니다. –

1

해당 테이블에서 필드를 가져 오지 않으면 EXISTS 절을 사용하는 것이 더 빠를 수 있습니다.이 경우에도 결과에 중복 테이블이 생기지 않습니다. JOIN

1

옵티마이 저가 불필요한 조인을 무시하더라도 특별한 경우를 처리하기 위해 다른보기를 만들어야합니다. 보기 (예 :이 경우)의 사용 및 악용은 손에서 벗어나 난독 화, 혼란 및 매우 중요한 성능 문제로 이어질 수 있습니다.

"작은"뷰 세트에 조인하여 현재 사용중인 것과 동일한 데이터 세트를 제공함으로써 사용하려는 뷰를 리팩터링하는 것을 고려할 수도 있습니다. 코스.