如何在SQL Server中获得正确的查询执行时间?

时间:2013-05-09 10:07:40

标签: sql-server tsql sql-server-2005

我需要获取查询的执行时间。我正在使用

declare @starttime datetime
declare @endtime datetime
set @starttime =getdate()   

 -- execute my query here

set @endtime = GETDATE()
select @endtime-@starttime

但输出结果为1900-01-01 00:02:10.707

我只需要时间部分。

7 个答案:

答案 0 :(得分:19)

使用此:

set statistics time on
--query
set statistics time off

然后转到“消息”标签,看到如下消息:

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

答案 1 :(得分:4)

SET STATISTICS TIME { ON | OFF }

Example     
USE AdventureWorks2012;
GO 

SET STATISTICS TIME ON;    
GO

SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;    
GO

SET STATISTICS TIME OFF;    
GO

答案 2 :(得分:3)

在diff之后尝试使用这种不同的转换:

SELECT CONVERT(VARCHAR(12),@endtime-@starttime, 108)  -- 00:02:10
SELECT CONVERT(VARCHAR(12),@endtime-@starttime, 114)  -- 00:02:10.707

108和114表示日期转换的格式类型,请参阅http://msdn.microsoft.com/it-it/library/ms187928.aspx

答案 3 :(得分:2)

使用SQL Server 2008及更高版本中可用的time数据类型

现在标签是正确的,这是SQL Server 2005 ...

select CONVERT(varchar(12), @endtime-@starttime, 114)

答案 4 :(得分:2)

DECLARE @StartTime datetime,@EndTime datetime   
SELECT @StartTime=GETDATE() 

- 你要运行的查询就在这里 -

SELECT @EndTime=GETDATE()   
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in microseconds]  

答案 5 :(得分:1)

使用比OP更高版本的SQL Server的用户的更新:在SQL Server 2017(版本14.0)中,默认情况下,“消息”选项卡下显示查询所花费的时间和受影响的行数。 A screen clip after I ran a query, I'm using Azure Data Studio

答案 6 :(得分:0)

您应该使用DATEDIFF(MICROSECOND, @starttime, @endtime)来获取经过的时间(以毫秒为单位),因此您的查询应更改为以下形式:

DECLARE @starttime datetime
DECLARE @endtime datetime

SET @starttime =getdate()   

-- execute my query here

SET @endtime = GETDATE()

SELECT DATEDIFF(MICROSECOND, @starttime, @endtime)

尽管您可以使用名为Include Client Statistics的内置功能,here对此进行了解释。