'1'만 인쇄하고 '2'를 인쇄하면 SSMS 메시지 창에 메시지가 표시 될 때까지의 시간을 측정 한 다음 서버와 클라이언트 간의 출력 버퍼링의 피해가 줄어 듭니다. print '1'
은 일 수 있으며 클라이언트에 즉시 반환되지 않으며 SqlClient, ADO.Net 및 SSMS는 자체 버퍼링을 일부 수행합니다. 따라서 전체적으로 SSMS 결과 메시지 패널에서 '1'을 실제로 볼 수있는 것보다 나중에 표시 할 수 있습니다. '1'뿐만 아니라 getdate()에서 시간을 인쇄하는 것이 훨씬 더 좋습니다. 이렇게 방정식에서 버퍼링을 제거하면 출력이 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...
당신이 이야기하고있는 * 추정 * 계획 또는 * 실제 * 계획에 대해 :
는 다음과 같이 무엇에 내가 자주 할 수있다? 예. SSMS 작업 표시 줄 버튼 '예상 실행 계획 표시'또는 '실제 실행 계획 포함'작업 표시 줄 버튼이 켜지면 쿼리 실행 후 표시된 계획이 표시됩니다. –
나는 실제 실행 계획에 대해 말하고 있지만 "예상 운영자 비용"이라고 여전히 말합니다. –