2011-04-29 4 views
3

그 두 문 중 어느 것이 더 높은 성능 (왜)이있을 수 있습니다 SQL Server 성능 - Subselect 또는 내부 조인? 나는이 질문을 숙고했습니다

select * 
from formelement fe 
inner join form f on fe.formid = f.id 
where f.name = 'Test' 

한 형태는 여러 형태의 요소가 포함

select * from formelement 
where formid = (select id from form where name = 'Test') 

또는

를 하나 개의 폼 요소이다 항상 한 가지 형태의 일부.

감사합니다,

데니스

+2

둘 다 실행하고 실행 계획을 비교 ... – JNK

+0

좋은 아이디어, 솔직히 말해서 나는이 아이디어가 존재하지 않았다. 그러나 이것이 성능을 정확히 필요로하는 질문에 대한 답변을 제공하는 반면 실제로 그 이유에 대해서는 알려주지 않습니다. –

+0

나는 나의 대답을 삭제했다 :) 실행 계획을 위해, 그들은 왜 당신에게 말할 것이다. 조작이 다른지, 실행 된 조작의 유형이 사용자에게 추론을 제공하는지 알 수 있습니다. – JNK

답변

1

이상 EXISTS을 선호하지 않습니다 SQL Server 엔진에 의해 선택됩니다. 쿼리 계획은 SQL, 정확한 테이블 구조, 테이블 통계, 사용 가능한 인덱스 등을 포함하여 많은 요인에 따라 달라집니다.

두 쿼리가 매우 간단하므로 내 추측 그 결과 동일한 (또는 매우 유사한) 실행 계획이 생겨 유사한 성능을 보일 것입니다.

이 (대형, 복잡한 쿼리의 경우, SQL 의 정확한 표현은 차이를 만들 수 있습니다, 댄 견인에 의해 도서 SQL Tuning가에 좋은 조언을 많이 제공합니다.)

3
당신이 두 테이블에서 모든 것을 돌아갑니다 조인에서 말했다 조인에 필터링을 추가하는 경우는 같은 것입니다 가능성이 가장 높은 실행 계획에서

보면,

실제로 성능은 쿼리 계획에 따라 두

select * from formelement fe 
where exists (select 1 from form f 
       where f.name='Test' 
       and fe.formid =f.id) 
+0

'IN'은 이것과 마찬가지로 존재합니다. 정확한 (exec plan wise)? – JNK

+1

예, 같아야합니다, NULLS에 대해 걱정할 필요가 없거나 formelement 테이블에 열 이름이 존재하면 오류를 발생시키지 않는 열 이름을 잘못 입력했기 때문에 더 좋아합니다. 여기 예 : http://forum.lessthandot.com/viewtopic.php?f=17&t=14123 – SQLMenace