【问题标题】:How to get correct query execution time in SQL Server?如何在 SQL Server 中获得正确的查询执行时间?
【发布时间】:2013-05-03 18:43:18
【问题描述】:

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

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

我只需要时间部分。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • @user2360877:那么为什么要标记这个 SQL Server 2008?
【解决方案2】:

在你的差异之后尝试这种不同的转换:

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】:
    声明 @StartTime 日期时间,@EndTime 日期时间 选择 @StartTime=GETDATE()

    --您要运行的查询放在这里--

    选择 @EndTime=GETDATE() SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [持续时间,以毫秒为单位]

    【讨论】:

    • 持续时间以毫秒为单位,而不是微秒。在微秒内将 ms 更改为 mcs
    【解决方案4】:

    使用这个:

    set statistics time on
    --query
    set statistics time off
    

    然后转到“消息”选项卡以查看如下消息:

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

    【讨论】:

      【解决方案5】:

      设置统计时间选项:

      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
      

      【讨论】:

        【解决方案6】:

        对于那些使用比 OP 更高版本的 SQL Server 的用户的更新:在 SQL Server 2017(版本 14.0)中,查询所用的时间和受影响的行数默认显示在消息选项卡下。

        【讨论】:

          【解决方案7】:

          您应该使用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 中进行了解释。

          【讨论】:

            【解决方案8】:

            在 SSMS 中,在菜单栏中: 前往

            1.查询>查询选项>高级>设置统计时间

            2.Query>查询选项>高级>SET STATISTICS IO

            这将使您的消息窗口中的输出看起来像这样:

            SQL Server 解析和编译时间: CPU 时间 = x 毫秒,运行时间 = y 毫秒。

            SQL Server 执行时间: CPU 时间 = x 毫秒,运行时间 = y 毫秒。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-03-09
              • 1970-01-01
              • 2019-05-25
              • 1970-01-01
              • 1970-01-01
              • 2011-11-13
              • 2023-03-15
              相关资源
              最近更新 更多