186

SqlServer 2005 を使用して 2 つの t-sql クエリを実行しています。それぞれの実行にかかる時間をどのように測定できますか?

ストップウォッチを使ってもうまくいきません。

4

6 に答える 6

277

上記の回答よりも正確な測定が必要な場合:

set statistics time on 

-- Query 1 goes here

-- Query 2 goes here

set statistics time off

結果は[メッセージ]ウィンドウに表示されます。

更新 (2015-07-29):

多くのご要望にお応えして、ストアド プロシージャのコンポーネントではなく、ストアド プロシージャ全体の実行時間を計測するために使用できるコード スニペットを作成しました。これは最後の実行にかかった時間を返すだけですが、それによって返される追加の統計sys.dm_exec_procedure_statsも価値がある場合があります。

-- Use the last_elapsed_time from sys.dm_exec_procedure_stats
-- to time an entire stored procedure.

-- Set the following variables to the name of the stored proc
-- for which which you would like run duration info
DECLARE @DbName NVARCHAR(128);
DECLARE @SchemaName SYSNAME;
DECLARE @ProcName SYSNAME=N'TestProc';

SELECT CONVERT(TIME(3),DATEADD(ms,ROUND(last_elapsed_time/1000.0,0),0)) 
       AS LastExecutionTime
FROM sys.dm_exec_procedure_stats
WHERE OBJECT_NAME(object_id,database_id)=@ProcName AND
      (OBJECT_SCHEMA_NAME(object_id,database_id)=@SchemaName OR @SchemaName IS NULL) AND
      (DB_NAME(database_id)=@DbName OR @DbName IS NULL)
于 2012-07-31T13:42:48.243 に答える
210

イベント間の「経過時間」を測定する単純な方法の 1 つは、現在の日付と時刻を取得することです。

SQL Server Management Studio で

SELECT GETDATE();
SELECT /* query one */ 1 ;
SELECT GETDATE();
SELECT /* query two */ 2 ; 
SELECT GETDATE(); 

経過時間を計算するには、これらの日付値を変数に取り込み、DATEDIFF 関数を使用できます。

DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;

SET @t1 = GETDATE();
SELECT /* query one */ 1 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;

SET @t1 = GETDATE();
SELECT /* query two */ 2 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;

それはたった1つのアプローチです。SQL プロファイラーを使用して、クエリの経過時間を取得することもできます。

于 2012-07-26T18:00:28.297 に答える