回答:
イベント間の「経過時間」を測定する単純なアプローチの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プロファイラを使用して、クエリの経過時間を取得することもできます。
SET @t1 = GETDATE();
、クエリの上部に貼り付けSET @t2 = GETDATE();SELECT 'NOTE 1',DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;SET @t1 = GETDATE();
てから、クエリ内の適切な場所に貼り付けます(「注1」を適切に編集します)。選択を測定値ではなくブレークポイントとして扱うことは、意味的にはアプローチと同じです(ただし、@ t1への最終的な設定は偽であり、これはすべてのクエリを測定する必要があることを前提としています)。これは純粋にメンタル/タイピングの最適化です(クエリごとに2つの貼り付けではなく、ブレークポイントごとに1つの貼り付け)。
上記の答えよりも正確な測定が必要な場合:
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)
To use SET STATISTICS TIME, users must have the appropriate permissions to execute the Transact-SQL statement. The SHOWPLAN permission is not required.
from:technet.microsoft.com/en-us/library/ms190287.aspx
DECLARE @StartTime datetime
DECLARE @EndTime datetime
SELECT @StartTime=GETDATE()
-- Write Your Query
SELECT @EndTime=GETDATE()
--This will return execution time of your query
SELECT DATEDIFF(MS,@StartTime,@EndTime) AS [Duration in millisecs]
別の方法は、メニュー>クエリ>クライアント統計を含めるClient Statistics
からアクセスできるという名前のSQL Server組み込み機能を使用することですです。
個別のクエリウィンドウで各クエリを実行し、Client Statistics
タブのすぐ横にあるMessages
タブに表示される結果を比較できます。
たとえば、下の画像の例では、私のクエリの1つに対するサーバー応答を取得するために経過した平均時間が39ミリ秒であることを示しています。
実行時間を取得するための3つの方法すべてをここで読むことができます。Estimated Execution Plan
ctrlLクエリについてさらに調査するために、表示する必要がある場合もあります。
さらに良いことに、これはクエリのn回の反復の平均を測定します。より正確な読み取りに最適です。
declare @tTOTAL int = 0
declare @i integer = 0
declare @itrs integer = 100
while @i < @itrs
begin
declare @t0 datetime = GETDATE()
--your query here
declare @t1 datetime = GETDATE()
set @tTotal = @tTotal + DATEDIFF(MICROSECOND,@t0,@t1)
set @i = @i + 1
end
select @tTotal/@itrs
MICROSECOND
にMILLISECOND
、キャッシュ毎回私はライン間の次に挿入クリアするbegin
とdeclare @t0 ...
:をCHECKPOINT; DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE;
。魅力的な作品で、まさに私が探していたものです。+1