2014-01-31 2 views
0

SQL Server 2008 실행 계획을 배우고 있으며 테스트를 위해 두 가지 쿼리를 실행하고 결과를 비교하려고했습니다.SQL Server 실행 계획 - 어떤 쿼리 성능이 좋은가

첫 번째 쿼리가 두 번째 쿼리보다 빠르게 실행됩니까? 나는 일반적으로 실행 비용 (성능 및 비용)을 확인합니다.

먼저 쿼리

enter image description here

SQL Server parse and compile time: 
    CPU time = 0 ms, elapsed time = 0 ms. 

SQL Server Execution Times: 
    CPU time = 0 ms, elapsed time = 0 ms. 
SQL Server parse and compile time: 
    CPU time = 0 ms, elapsed time = 0 ms. 

SQL Server Execution Times: 
    CPU time = 0 ms, elapsed time = 0 ms. 

(931 row(s) affected) 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Visits'. Scan count 2, logical reads 1235, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

SQL Server Execution Times: 
    CPU time = 203 ms, elapsed time = 198 ms. 

번째 질의

enter image description here

SQL Server Execution Times: 
    CPU time = 0 ms, elapsed time = 0 ms. 
SQL Server parse and compile time: 
    CPU time = 0 ms, elapsed time = 0 ms. 

SQL Server Execution Times: 
    CPU time = 0 ms, elapsed time = 0 ms. 

(1 row(s) affected) 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Visits'. Scan count 1, logical reads 19335, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

SQL Server Execution Times: 
    CPU time = 109 ms, elapsed time = 250 ms. 
+0

'SET STATISTICS IO ON'및 'SET STATISTICS TIME ON'에 대한 실행 비용과 값을 살펴보고 비교할 필요가 있습니다 (모든 통계를 함께 제공해야 함). 쿼리가 성능 측면에서 더 잘 작동합니다. –

+0

두 번째 imgae가 명확하지 않은 이유를 모르겠습니다. – user1263981

+0

실행 시간 통계를 추가했습니다. – user1263981

답변

1

T 통계 결과에 따르면 그는 처음에는 더 빠릅니다. 여기에서 살펴볼 사항에는 경과 된 시간과 읽기/쓰기 횟수가 포함됩니다.

1 쿼리 :

SQL Server Execution Times: CPU time = 203 ms, elapsed time = 198 ms.

2 쿼리 :

SQL Server Execution Times: CPU time = 109 ms, elapsed time = 250 ms.

첫 번째 쿼리가 약간 더 빠르게 수행합니다. Milliseconds는 사소한 것처럼 보일 수 있지만 문자 그대로 하루에 수천 번 실행되는 쿼리의 경우 이러한 모든 초 단위의 비트가 빠르게 합산됩니다. .

(가) 읽기 및 검색 결과 집합을 얻기 위해 수행해야하는 작업의 양을 나타내는 것이다 (기록입니다 찾기 위해 또 다른 것은

1 쿼리 :

(931 row(s) affected) Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Visits'. Scan count 2, **logical reads 1235**, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

2 질의 : 일에

(1 row(s) affected) Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Visits'. Scan count 1, **logical reads 19335**, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Logical reads 대/소문자는 데이터를 실제 디스크에서 검색하는 비싸지 않은 physical reads보다 저렴한 버퍼 캐시에서 검색된 데이터를 나타냅니다. 아직도, 더 적은 것이 더 낫다. 이 경우

는 처음 쿼리 이하 ( 19335 VS 1235), 제 질의보다 판독하고, 따라서 두 번째 선호되는 짧은 시간 (경과 시간 = 198ms VS 250ms)으로 실행하고, 필요로한다.

실행 계획에서 추가 팁 1 개가 더 많은 데이터가 전달되는 것을 나타냅니다. 그러나 시각적 인 단서를 줄 수는 있지만 표시된 실행 계획이 정확하지 않은 상황을 경험 했으므로 결과를 확인하십시오.