2014-04-08 4 views
0

먼저 SQL Server에서 하위 쿼리를 평가하도록 할 수 있습니까?SQL Server에서 하위 쿼리를 먼저 계산하도록합니다.

SELECT ObjectId FROM 
(SELECT ObjectId FROM Table Where Id = @Id) T 
WHERE fn_LongRunningFunction(T.ObjectId) = 1 

내가 절은 내부 쿼리의 결과를 평가하기 위해 외부를 원하는 :

내 쿼리는 뭔가 것 같습니다. 임시 쿼리 테이블에 하위 쿼리를 삽입하지 않으면 어떻게됩니까?

나는 그것이 같은 기록 된 곳처럼이 쿼리의 SQL 쿼리를 평가 실행하면 : 내가 원하는하지 않은

SELECT ObjectId FROM Table Where Id = @Id AND fn_LongRunningFunction(ObjectId) = 1 

. WHERE 절에 스칼라 함수를 사용하여 당신이 단순히 하나 개의 여기에 쿼리 같은 것을 사용할 수도 당신도 여기에 하위 쿼리를 사용하는 이유는

답변

1

....

SELECT ObjectId 
FROM Table 
Where Id = @Id 
AND fn_LongRunningFunction(ObjectId) = 1 

SQL Server는 열의 모든 행을 터치하고 ObjectId 열의 값에서 함수를 실행하여 값이 1인지 여부를 평가해야하기 때문에 전체 테이블 스캔이 발생합니다.

가능한 경우 열 이름의 where 절에 함수를 사용하지 마십시오.

예를 들어 주어진 값에 대한 열의 값을 비교하는 경우 비교 연산자의 반대쪽에서 역순으로 행하고 where 절에 열을 남겨 둡니다 (예 : 테이블의 값을 찾는 경우).

WHERE ColumnName + 20 < 100 

대신 당신이 첫 번째 예에서

WHERE ColumnName < 100 -20 

같은 것을 할 수있는 일의 SQL Server는 모든 행을 터치해야합니다 및 테이블의 원인이되는 (100)에 대해 그것을 평가하는 값에 20을 추가합니다 주사.

두 번째 예에서 SQL Server에 해당 열의 인덱스가있는 경우 어떤 값이 100-20 미만인지 확인하기 만하면됩니다.

관련 문제