计算SQL查询的执行时间?

时间:2009-02-27 17:31:24

标签: sql sql-server-2005

我在我的网站上提供搜索功能,当用户搜索记录时,我想显示查询所需的时间,以获得与谷歌相同的结果。当我们搜索任何内容时,谷歌会显示获得结果所需的时间吗?

为此,我在我的SP中声明了一个@start变量,并在最后找到差异,如下所示;

DECLARE @start_time DATETIME

SET @start_time = GETDATE()

-- my query
SELECT * FROM @search_temp_table

SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'TimeTaken'

还有其他简单快捷的方法,还是单行查询,我们可以通过它查找执行查询的时间?

我正在使用SQL Server 2005。

8 个答案:

答案 0 :(得分:87)

好吧,如果您真的想在自己的数据库中执行此操作,可以使用MSDN中给出的更准确的方法:

SET STATISTICS TIME ON

您也可以从您的应用程序中阅读此信息。

答案 1 :(得分:25)

我发现这个更有帮助和简单

DECLARE @StartTime datetime,@EndTime datetime   
SELECT @StartTime=GETDATE() 
--Your Query to be run goes here--  
SELECT @EndTime=GETDATE()   
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in milliseconds]   

答案 2 :(得分:20)

我们从应用程序代码中监视这一点,只是为了包括建立/关闭连接和通过网络传输数据所需的时间。这很直接......

Dim Duration as TimeSpan
Dim StartTime as DateTime = DateTime.Now

'Call the database here and execute your SQL statement

Duration = DateTime.Now.Subtract(StartTime)
Console.WriteLine(String.Format("Query took {0} seconds", Duration.TotalSeconds.ToString()))
Console.ReadLine()

答案 3 :(得分:17)

请使用

-- turn on statistics IO for IO related 
SET STATISTICS IO ON 
GO

和时间计算使用

SET STATISTICS TIME ON
GO

然后它将为每个查询提供结果。在查询输入窗口附近的消息窗口中。

答案 4 :(得分:14)

declare @sttime  datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster   
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'    

答案 5 :(得分:8)

你为什么在SQL中这样做?不可否认,这确实显示了“真正的”查询时间,而不是查询时间+在网络中每次移动数据所花费的时间,但它会污染您的数据库代码。我怀疑你的用户会关心 - 实际上,他们可能而不是包含网络时间,因为这些都有助于他们查看页面所花费的时间。

为什么不在Web应用程序代码中进行计时?除了其他任何东西,这意味着对于想要做任何时间的情况,但是你想要执行相同的过程,你不需要乱用你不喜欢的东西需要。

答案 6 :(得分:1)

您可以使用

SET STATISTICS TIME { ON | OFF }

显示解析,编译和执行每个语句所需的毫秒数

当SET STATISTICS TIME为ON时,将显示语句的时间统计信息。关闭时,不显示时间统计信息

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  

答案 7 :(得分:0)

试试这个

DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()

  SET @EndTime = GETDATE()
  PRINT 'StartTime = ' + CONVERT(VARCHAR(30),@StartTime,121)
  PRINT '  EndTime = ' + CONVERT(VARCHAR(30),@EndTime,121)
  PRINT ' Duration = ' + CONVERT(VARCHAR(30),@EndTime -@starttime,114)

如果没有,请尝试SET STATISTICS TIME ON