2009-02-27 372 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