이것은 정식 답변은 아니지만 SQL Fiddle에 표시된 중첩 루프 쿼리 계획의 경우 USE PLAN힌트를 사용하여 쿼리 2에서 쿼리 1로 계획을 적용 할 수 있지만 역방향 작업을 시도하면 실패합니다.
USE PLAN 힌트에 쿼리에 적합한 것으로 검증 될 수없는 계획이 포함되어 있으므로 쿼리 프로세서가 쿼리 계획을 생성 할 수 없습니다. USE PLAN 힌트를 제거하거나 교체하십시오. 성공적인 계획 강제 실행 가능성을 높이려면 USE PLAN 힌트에 제공된 계획이 동일한 쿼리에 대해 SQL Server에서 자동으로 생성 된 계획인지 확인하십시오.
옵티 마이저 변환 규칙을 사용 안함으로 설정하면 ReorderLOJN 이전에 성공한 계획 힌트도 성공하지 못합니다.
데이터 쇼의 큰 양으로 실험하는 것은 SQL Server는 변화의 확실 할 수 있는지 (A LOJ B) LOJ C에 A LOJ (B LOJ C)자연스럽게뿐만 아니라,하지만 난 반대가 사실임을 증거를 보지 않았다.
첫 번째 쿼리가 두 번째 쿼리보다 더 잘 수행되는 매우 고안된 사례는 다음과 같습니다.
DROP TABLE MyGrandChild , MyChild, MyParent
CREATE TABLE MyParent
(Id int)
CREATE TABLE MyChild
(Id int PRIMARY KEY
,ParentId int,
Filler char(8000) NULL)
CREATE TABLE MyGrandChild
(Id int
,ParentId int)
INSERT INTO MyChild
(Id, ParentId)
SELECT TOP (100000) ROW_NUMBER() OVER (ORDER BY @@SPID),
ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM master..spt_values v1, master..spt_values
INSERT INTO MyGrandChild
(Id, ParentId)
OUTPUT INSERTED.Id INTO MyParent
SELECT TOP (3000) Id, Id AS ParentId
FROM MyChild
ORDER BY Id
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
SELECT gc.Id AS gcId,
gc.ParentId AS gcpId,
c.Id AS cId,
c.ParentId AS cpId,
p.Id AS pId
FROM MyGrandChild AS gc
LEFT OUTER JOIN MyChild AS c
ON c.[Id] = gc.[ParentId]
LEFT OUTER JOIN MyParent AS p
ON p.[Id] = c.[ParentId]
SELECT gc.Id AS gcId,
gc.ParentId AS gcpId,
c.Id AS cId,
c.ParentId AS cpId,
p.Id AS pId
FROM MyGrandChild AS gc
LEFT OUTER JOIN( MyChild AS c
LEFT OUTER JOIN MyParent AS p
ON p.[Id] = c.[ParentId])
ON c.[Id] = gc.[ParentId]
어느 계획을 제공

나를 위해 쿼리 1의 경과 시간은 108ms 대 쿼리 2의 경우 1,163ms였습니다.
쿼리 1
Table 'Worktable'. Scan count 0, logical reads 0
Table 'MyChild'. Scan count 0, logical reads 9196
Table 'MyGrandChild'. Scan count 1, logical reads 7
Table 'MyParent'. Scan count 1, logical reads 5
쿼리 2
Table 'MyParent'. Scan count 1, logical reads 15000
Table 'MyChild'. Scan count 0, logical reads 9000
Table 'MyGrandChild'. Scan count 1, logical reads 7
따라서 첫 번째 ( "unested") 구문은 잠재적 인 조인 순서를 더 많이 고려할 수 있기 때문에 잠재적으로 유리할 수 있지만 잠정적으로 충분한 테스트를 수행하지 않아서 일반적인 규칙으로이를 확신 할 수는 없습니다.
쿼리 2가 더 잘 수행되는 카운터 예제를 만드는 것이 가능할 수도 있습니다. 둘 다 시도하고 실행 계획을 살펴보십시오.