Подтвердить что ты не робот

Вычислить время выполнения SQL-запроса?

Я предоставляю функции поиска на своем веб-сайте, когда пользователь ищет запись, тогда я хочу отобразить время, когда запрос был получен, чтобы получить результаты, подобные 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.

4b9b3361

Ответ 1

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

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

Ответ 2

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

SET STATISTICS TIME ON

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

Ответ 3

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

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]   

Ответ 4

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

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

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

SET STATISTICS TIME ON
GO

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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  

Ответ 8

попробуйте это

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