2009-12-09 5 views
0

나는 A + B 합계를 생성하고자하는 두 개의 데이터 열 A와 B가있는 간단한 데이터 로깅 테이블을 가지고 있습니다. 그러나 A와 B 중 하나 또는 둘 모두가 널이 될 수 있습니다.T-SQL 쿼리 계획을 통해 최상의 쿼리 형식을 선택할 수 있습니까?

:이 표는 기본 키

내가이 고양이를 피부 여러 가지 방법으로 볼 수 있지만 내가 선호하는 방법은 타임 스탬프의 범위에서 데이터를 요약 할 수 있습니다 무엇인지 궁금했다있는 타임 스탬프 열이

 
Form Select Compute Scalar Stream Aggregate Compute Scaler Clustered Index Seek 
    1  0%   0%    11%    1%     87%  
    2  0%   0%    11%    1%     87%  

Form Select Compute Scalar Compute Scaler Stream Aggregate Clustered Index Seek 
    3  0%   0%    0%    12%     88%  

나는 매우 그래서 숫자를 해석하는 방법을 잘 모르겠습니다 전에 쿼리 계획에 파 놓은 광산 적이있다 :

1. SUM(Coalesce(A,0)+Coalesce(B,0)) 

2. SUM(Coalesce(A+B,A,B,0)) 

3. Coalesce(Sum(A), 0) + Coalesce(SUM(B), 0) 

은 내가 실행 계획에서 다음과 같은 결과를 얻을 수 있습니다. 일반적으로 오른쪽으로 더 밀면 전반적인 백분율이 뒤틀린다고 말하는 것이 공평할까요? 양식 3을 1과 2보다 우월하게 만드십니까?

답변

2

예상되는 경우에 맞게 최적화하십시오.

여기서 A와 B가 대부분 시간 값을 가지면 결합이 첫 번째 값에 도달하여 중단하기 때문에 # 2가 더 잘 수행되어야합니다. A 또는 B가 NULL 인 경우 매우 자주 # 1로 조금 더 잘할 수 있습니다. 여기에서 핵심은 항상 그렇듯이 실제 데이터에서 실제 시간을 프로파일 링하고 프로파일 링하는 것입니다.

+0

좋아요.하지만 쿼리 계획 결과가 동일한 데이터를 통해 실행되었다고하면 어떻게되는지 알 수 있습니까? –

+1

실제로 쿼리를 실행하기 전에 쿼리 엔진에서 사용하기 위해 생성 된 _expected_ 계획입니다. SQL Server에서 쿼리를 실행하는 방법을 알려주지 만 실제로 시간을 고려하지는 않습니다. 실제 실행 시간을 살펴 봐야합니다. 그렇지 않으면 조용한 서버에서 수행하고, 평균을 얻기 위해 여러 번하십시오. –

+0

@Joel .. 근본적으로이 실행 계획을 보는 것이별로 유용하지 않으며 조용한 서버에서 실제 데이터에 대해 쿼리를 실행하여 실제로 의미있는 결정을 내릴 수 있다고 나에게 말하고 있습니까? 이것은 나에게 조금 솔직하지 않은 것처럼 보입니다. –