2010-06-28 5 views
2

다음 쿼리를 고려하십시오.내부 쿼리를 추가해도 실행 계획이 변경되지 않습니다.

select * from contact where firstname like '%some%' 

select * from 
    (select * from contact) as t1 
where firstname like '%some%' 

두 쿼리의 실행 계획은 동일하며 동시에 실행됩니다. 하지만 두 번째 쿼리가 다른 계획을 가지고 있고 연락처에서 모든 데이터를 선택하고 필터를 적용해야하므로 느리게 실행될 것으로 예상했습니다. 내가 잘못한 것 같아.

어떻게 이런 일이 일어나고 있는지 궁금합니다.

데이터베이스 서버 :

답변

6

"쿼리 최적화 프로그램"은 현재 상황입니다. 쿼리를 실행할 때 SQL Server는 비용 기반 옵티 마이저를 사용하여 요청을 수행하는 가장 좋은 방법 (즉, 실행 계획)을 식별합니다. A 지점에서 B 지점까지의 경로지도로 생각하십시오. A에서 B까지는 여러 가지 방법이있을 수 있으며, 일부는 다른 것보다 빠를 것입니다. SQL Server는 쿼리를 만족시키는 데이터를 반환하고 수용 가능한 비용을 가진 데이터를 반환한다는 최종 목표를 달성하기 위해 여러 가지 경로를 사용할 것입니다. 그것은 불필요하게 비싸기 때문에 반드시 모든 가능한 방법을 분석하지는 않습니다.

귀하의 경우 옵티마이 저는 이러한 2 개의 쿼리를 동일한 것으로 축소 할 수 있다는 점을 알아 냈습니다. 따라서 동일한 계획을 얻게됩니다.

관련 문제