Рассчитать время выполнения SQL-запроса? - PullRequest
46 голосов
/ 27 февраля 2009

Я предоставляю функции поиска на моем веб-сайте, когда пользователь ищет запись, я хочу отобразить время, затраченное на запрос, чтобы получить результаты, аналогичные Google. Когда мы что-то ищем, Google отображает, сколько времени требуется для получения результатов?

Для этого я объявил переменную @start в моем SP и нашел разницу в конце, как показано ниже;

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 ]

87 голосов
/ 28 июля 2009

Что ж, если вы действительно хотите сделать это в своей БД, есть более точный способ, описанный в MSDN :

SET STATISTICS TIME ON

Вы также можете прочитать эту информацию из своего приложения.

25 голосов
/ 24 июня 2013

Я нашел это еще более полезным и простым

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]   
20 голосов
/ 27 февраля 2009

Мы отслеживаем это из кода приложения, просто чтобы включить время, необходимое для установления / закрытия соединения и передачи данных по сети. Это довольно просто ...

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()
17 голосов
/ 31 августа 2012

Пожалуйста, используйте

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

и для расчета времени используйте

SET STATISTICS TIME ON
GO

тогда даст результат для каждого запроса. В окне сообщений рядом с окном ввода запроса.

14 голосов
/ 05 апреля 2011
declare @sttime  datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster   
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'    
8 голосов
/ 27 февраля 2009

Почему вы делаете это в SQL? По общему признанию, это показывает «истинное» время запроса, а не время запроса + время, необходимое для перетасовки данных по сети, но это загрязняет код вашей базы данных. Я сомневаюсь, что ваши пользователи будут заботиться - на самом деле, они, вероятно, , а не , будут включать время в сети, поскольку все это увеличивает время, затрачиваемое на просмотр страницы.

Почему бы не сделать синхронизацию в коде вашего веб-приложения? Помимо всего прочего, это означает, что в тех случаях, когда вы не хотите выполнять какие-либо измерения времени, но хотите выполнить тот же процесс, вам не нужно возиться с чем-то, что вы не делаете необходимо.

1 голос
/ 06 июня 2017

Вы можете использовать

SET STATISTICS TIME { ON | OFF }

Отображает количество миллисекунд, необходимое для разбора, компиляции и выполнения каждого оператора

Когда SET STATISTICS TIME включена, отображается статистика времени для выписки. Когда ВЫКЛ, статистика времени не отображается

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  
0 голосов
/ 14 февраля 2014

попробуйте

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)

Если это не сработает, попробуйте установить значение STATISTICS TIME ON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...