2014-01-31 2 views
0

Я изучаю план выполнения SQL Server 2008 и для тестирования. Я выполнил два запроса и попытался сравнить результаты.план выполнения SQL-сервера - какая хорошая производительность запросов

Первый запрос работает быстрее, чем второй? Обычно я проверяю стоимость исполнения (производительность и стоимость).

Первый запрос

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

Я не знаю, почему второй имги не очень ясен. – user1263981

+0

Я добавил статистику времени выполнения – user1263981

ответ

1

Т поначалу он быстрее, по данным статистики. Вещи, которые нужно искать там, включают прошедшее время и количество чтений/записей.

первый запрос:

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

второй запрос:

SQL Server Execution Times: CPU time = 109 ms, elapsed time = 250 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.

второй запрос:

(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, где данные извлекаются с физического диска (и это дорого). Но тем лучше.

В этом случае, ваш первый запрос выполняется за меньшее время (прошедшее время = 198ms против 250ms), и требует меньше операций чтения, чем второй запрос, (1235 против 19335), и, следовательно, является более предпочтительным, чем второй.

Один дополнительный наконечник в плане выполнения более толстых баров представляет собой большее количество передаваемых данных. Однако, хотя они могут дать вам визуальный ключ, обязательно проверьте его результаты, поскольку я столкнулся с ситуациями, когда отображаемый план выполнения не был точным.

Смежные вопросы