마지막 질문 인 Sql Server query performance에 이어 검색 쿼리에서 선택적 매개 변수를 허용하는 나의 방법이 최적이 아니라는 것을 발견하면 누구에게이 방법에 대한 지침이 있습니까?최적의 검색 쿼리
예를 들어 응용 프로그램 테이블, 고객 테이블 및 연락처 정보 테이블이 있고 성, 집 전화, 모바일 및 응용 프로그램 ID 중 일부 또는 전부를 검색 할 수있는 SP를 만들고 싶습니다. 같은 것을 사용할 수 있습니다 다음
이select *
from application a inner join customer c on a.customerid = a.id
left join contact hp on (c.id = hp.customerid and hp.contacttype = 'homephone')
left join contact mob on (c.id = mob.customerid and mob.contacttype = 'mobile')
where (a.ID = @ID or @ID is null)
and (c.Surname = @Surname or @Surname is null)
and (HP.phonenumber = @Homphone or @Homephone is null)
and (MOB.phonenumber = @Mobile or @Mobile is null)
위에서 사용 된 스키마는 진짜이며, 나는 실제 시나리오에서 선택 *를 사용하지 않을 것, 그것이 내가에 관심이 where 절의 건설입니다 더 나은 접근 방식, 동적 SQL 또는 많은 중첩 된 조건에 대한 필요성없이 같은 결과를 얻을 수있는 대안이 있는가? 그렇지 않으면 첫 번째 쿼리 계획 재사용되고, 아무리 매개 변수 - 여기 우리가
OPTION (RECOMPILE)
이 필수입니다 가고,
+1 : 좋은 참조 문서를! – RedFilter
훌륭한 기사, 동적 SQL이 (sp_executesql을 사용한다고해도) 악의적이지만 실제로는 스스로 연구하지는 못한다는 DBA 몇 명으로부터 들었습니다. 이 접근법을 사용하기 위해 몇 가지 주요 쿼리를 다시 작성하면 상당한 개선이있었습니다. – Macros