Если вы печатаете только «1» и печатаете «2», то измеряйте время между тем, когда вы видите сообщение на панели сообщений SSMS, тогда вы становитесь жертвой буферизации вывода между сервером и клиентом. print '1'
может не сразу отправляться обратно клиенту, а SqlClient, ADO.Net и SSMS также выполняют некоторую собственную буферизацию. Таким образом, в целом вы можете увидеть «1» на панели сообщений о результатах SSMS, намного позже, чем это произошло на самом деле. Гораздо лучше вывести время из getdate (), а не просто «1». Таким образом вы удаляете буферизацию из уравнения и можете видеть в самом сообщении время, когда сервер выполнил «печать», а не время, когда его вывод отображался SSMS.
SET STATISTICS TIME ON
всегда будет более точным, но иногда трудно понять, к какому именно утверждению оно относится.
То, что я обычно делаю, выглядит примерно так:
declare @nowString varchar(100);
declare @start datetime, @end datetime, @rc int, @elapsed int;
set @start = getdate();
select many, fields
from bigtable
join manytables on condition = complex
where matches = many
order by wacky sort;
set @rc = @@rowcount;
set @end = getdate();
set @elapsed = datediff(ms, @start, @end);
set @nowString = cast(varchar(100), getdate(), 14);
raiserror(N'%s: At select No 1. Selected %i rows in %i ms', 10, 1, %nowString, @rc, @elapsed);
set @start = getdate();
...next select here...