должно быть

аюсь определить относительную производительность двух разных запросов, и у меня есть два способа измерения этого:
1. Запустите оба и время каждого запроса
2. Запустите оба и получите «Стоимость запроса» из фактического плана выполнения.

Вот код, который я запускаю для определения времени запросов ...

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1a
SELECT getDate() - @start AS Execution_Time
GO

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1b
SELECT getDate() - @start AS Execution_Time
GO

Я получаю следующее:

Stored_Proc     Execution_Time     Query Cost (Relative To Batch)

test_1a         1.673 seconds      17%
test_1b         1.033 seconds      83%

Результаты времени выполнения прямо противоречат результатам стоимости запроса, но мне трудно определить, что на самом деле означает «стоимость запроса». Мое лучшее предположение состоит в том, что это совокупность операций чтения / записи / CPU_Time / и т. Д., Поэтому, я думаю, у меня есть пара вопросов:

Есть ли конкретный источник, чтобы объяснить, что означает эта мера?

Какие еще метрики «производительность запроса» используют люди, и каковы их относительные достоинства?


Может быть важно отметить, что это SQL Server среднего размера, работающий под управлением MS SQL Server 2005 на MS Server 2003 Enterprise Edition с несколькими процессорами и более чем 100 одновременными пользователями.

РЕДАКТИРОВАТЬ:

После некоторого беспокойства мне удалось получить доступ к Profiler на этом SQL Server, и я могу предоставить дополнительную информацию (которая поддерживает стоимость запросов, связанную с системными ресурсами, а не с самим временем выполнения ...)

Stored_Proc    CPU      Reads    Writes   Duration   

test_1a        1313     3975     93       1386
test_1b        2297     49839    93       1207

Впечатляет, что больше CPU требует больше чтения, чем меньше :)