Вычислить время выполнения 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.
Ответы
Ответ 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