计算SQL查询的执行时间?
我在我的网站上提供搜索功能,当用户搜索一条记录时,我想显示查询所用的时间,以获得与谷歌相同的结果。当我们搜索任何东西时,谷歌会显示获得结果所需的时间 为此,我在我的SP中声明了一个@start变量,并在末尾查找差异,如下所示计算SQL查询的执行时间?,sql,sql-server-2005,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, @
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。为什么要用SQL?诚然,这确实显示了一个“真实”的查询时间,而不是查询时间+在网络中来回移动数据所花费的时间,但这会污染数据库代码。我怀疑你的用户是否会在意——事实上,他们可能更愿意将网络时间包括在内,因为这都会增加他们查看页面所需的时间
为什么不在web应用程序代码中进行计时?除此之外,这意味着,如果您不想进行任何计时,但希望执行相同的过程,则不需要处理您不需要的事情。我们从应用程序代码中监控这一点,只需包括建立/关闭连接和通过网络传输数据所需的时间。这很直截了当 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() 作为时间跨度的暗淡持续时间 Dim StartTime as DateTime=DateTime.Now '在此处调用数据库并执行SQL语句 持续时间=DateTime.Now.Subtract(开始时间) WriteLine(String.Format(“查询花费了{0}秒”,Duration.TotalSeconds.ToString())
Console.ReadLine()如果您真的想在数据库中执行此操作,有一种更准确的方法,如中所示: 您也可以从应用程序中读取此信息。请使用
declare @sttime datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'
-- turn on statistics IO for IO related
SET STATISTICS IO ON
GO
用于时间计算
SET STATISTICS TIME ON
GO
然后它将给出每个查询的结果。在查询输入窗口附近的消息窗口中。我发现这个更有用、更简单
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]
试试这个
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 | 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
使用AdventureWorks2012;
去
设置统计时间;
去
选择ProductID、StartDate、EndDate、StandardCost
来自Production.ProductCostHistory
其中标准成本<500.00;
去
设置统计时间;
去
理想情况下,必须使用系统、诊断、秒表。我对你的anwser投了反对票,因为它不能回答实际问题。很好,你已经用VB解决了它,但是考虑把FAZ的答案标记为正确答案,虽然连接+查询+网络传输的总时间是非常实用的,但是我宁愿排除网络传输时间,因为搜索引擎外部的许多因素会影响它。我还喜欢让查询返回性能元数据的想法,这样应用程序就可以监控自己。这将允许应用程序在负载较高时自动排除或替换查询,或者在生成总和的查询开始随着目标表大小的增长而定期超过某个阈值时向开发人员发出警告。此外,当您添加增量功能时,查询的额外开销可能可以忽略不计,而查询时间本身可能不是。例如,我想通过一个新的求和查询将一个额外的整数发送回我的Flash客户端,因此开销可以忽略不计(即现有数据流仅增加4或5个字节,并且已经为其他检索到的数据打开了数据库连接),而查询执行时间可能很长。应用程序如何读取这些信息?微软的文章没有提到这一点。我给他们留下了反馈,询问我是否必须解析消息输出,或者是否有一种更结构化的方式来访问计时数据,特别是使用.NET framework类。很好,但有一点详细,它如何为每个事件分解时间,我只需要2到3之间的总时间points@Triynko:计时可在-event中读取有关上述内容的更多信息可在此处找到:以毫秒为单位而非微秒声明@StartTime datetime=GETDATE(),@EndTime datetime SET@EndTime=GETDATE()选择DATEDIFF(ms,@StartTime,@EndTime)作为[持续时间以毫秒为单位]这将不起作用,因为这些是运行时常量,并且是在查询首次运行时分配的值,而不是实际情况executed@mark1234我没听懂你说的话。哪一个不起作用?看这里,我已经在很多场合尝试过了,虽然开始和结束的时间可能不完全相同,但它们远远不够精确。例如,在最近的一个项目中,我的整个SP(包括一个耗时6分钟的索引重建)报告的时间不足1分钟。我使用datediff(毫秒,@Startdate,getdate())得到了更好的结果。我认为这是因为在执行过程中,直到到达该函数时才对其求值。我不知道;我没有确切的答案,但仅仅给开始和结束变量分配Getdate对我来说太不合适了
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