Как замерить время выполнения sql запроса
Иногда требуется понять какая часть в большом скрипте начинает проседать по скорости выполения. Первый вариант - это посмотреть план запроса.
Второй вариант - расставить в скрипте метки времени. Этот вариант и рассмотрим здесь.
Создаем функцию:
Create or ALTER FUNCTION [dbo].[as_sec] -- для вывода в print сколько секунд прошло
(
@text as nvarchar(max),
@start datetime
)
RETURNS varchar(max)
AS
BEGIN
DECLARE @res as nvarchar(max)=
cast(cast(DATEDIFF(millisecond,@start,getdate())/1000.0 as decimal(18,2)) as nvarchar) + ' sec - ' + @text
RETURN @res
END
Используем функцию:
DECLARE @t1 DATETIME = Getdate();
print [dbo].[as_sec] ('start', @t1)
select top 400 * from as_trace
print [dbo].[as_sec] ('after select 1', @t1)
select top 1000 * from as_trace
print [dbo].[as_sec] ('after select 2', @t1)
select top 20 * from as_trace
print [dbo].[as_sec] ('after select 2', @t1)
И получаем такой результат:

Таким образом наглядно видно, где возникает основная проблема по времени выполнения скрипта.
Что еще посмотреть по SQL Server
Как запустить SQL сценарий сразу на нескольких БД
Индексы SQL Server. Поиск дубликатов
Запрос для получения SQL всех индексов для таблиц базы данных SQL Server
Как перестроить все индексы на базе SQL Server
Как разрезать строку на части в SQL по некоторому символу
Конвертация из строки в таблицу в SQL Server
Выполнение прямого запроса к URL из SQL
SQL Server Как установить у таблицы описание (MS Description)
Как получить текущего юзера БД
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта