2009-02-27 156 views
44

我在我的网站上提供搜索功能,当用户搜索一条记录时,我想显示查询的时间,以获得与谷歌相同的结果。当我们搜索任何东西,然后谷歌显示需要多少时间才能获得结果?计算SQL查询的执行时间?

为此,我在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.

回答

18

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

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()
+19

为此,必须使用System.Diagnostics.StopWatch。 – naveen 2012-01-03 04:43:14

+5

我倒推了你的anwser,因为它没有回答实际的问题。很好,你已经使用VB解决了它,但考虑将faiz的答案标记为正确的答案 – 2014-07-04 09:30:15

8

为什么要在SQL中执行此操作?无可否认,这确实表现出“真实”的查询时间,而不是查询时间+在网络上每次刷新数据所花费的时间,但这会污染数据库代码。我怀疑你的用户是否会关心 - 事实上,他们可能会包含网络时间而不是,因为它们都会影响他们查看页面的时间。

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

+0

虽然连接+查询+网络传输的总时间是非常实用的,我宁愿排除网络传输时间,因为外部搜索引擎这么多的因素可以影响它。我也喜欢查询返回性能元数据的想法,因此应用程序可以监控自己。这将允许应用程序在负载较高时自动排除或替换查询,或者在产生总和的查询(例如,随着目标表大小增长而开始定期超过某个阈值)时警告开发人员。 – Triynko 2013-04-10 16:45:10

+0

此外,当您添加增量功能时,查询的额外开销可能可以忽略不计,而查询时间本身可能不会。例如,我想用一个新的和查询向我的Flash客户端发送一个额外的整数,因此开销可以忽略不计(即*现有*数据流只增加4或5个字节,并且数据库连接已经打开其他检索的数据),而查询执行时间可能很重要。 – Triynko 2013-04-10 16:49:32

86

好吧,如果你真的想这样做,在你的数据库有作为MSDN给出一个更准确的方法:

SET STATISTICS TIME ON 

可以读取这些信息从你的应用程序以及。

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

请使用

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

和时间计算使用

SET STATISTICS TIME ON 
GO 

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

24

我发现这是更多的帮助和简单

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] 
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 [email protected],114) 

如果不这样做,那么试试SET STATISTICS TIME ON

1

您可以使用

SET STATISTICS TIME { ON | OFF } 

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

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

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