T-SQL 실행 속도는 서버에 대한 네트워크 연결 대기 시간에 달려 있습니다. SQL Server에 대해 클라이언트에 다시보고 할 내용이 없으면 완료 될 때까지 실행되지만 테스트는 다른 이야기를 보여줍니다.
create procedure UselessLoop
@I int
as
declare @D datetime = getdate()
while @I > 0 set @I -= 1
print datediff(millisecond, @D, getdate())
exec UselessLoop 100000
Server Milliseconds
local 53
nearby 63
faraway 660
exec UselessLoop 1000000
Server Milliseconds
local 546
nearby 640
faraway 6183
테스트는 SSMS를 사용하는 다른 컴퓨터의 동일한 서버에 대해 실행됩니다. 로컬은 서버에서 실행되고, 근처는 동일한 로컬 네트워크에 있으며, 500km 떨어진 1 기가비트 파이버로 연결된 다른 사무실에서 실행됩니다.
실행 된 명령문 수에 직접적으로 의존하는 SQL Server와 클라이언트간에 진행중인 통신이 분명히 있습니다.
나는 Wireshark를 사용하여 전송되는 것을 보았지만 그 점을 많이 이해할 수는 없지만 22740 패킷으로 총 26MB를 교환하는 tcp.stream이었습니다.
대신 쓸모없는 기능은 어떻습니까?
create function dbo.UDFUselessLoop(@I int)
returns int
as
begin
declare @D datetime = getdate()
while @I > 0 set @I -= 1
return datediff(millisecond, @D, getdate())
end
print dbo.UDFUselessLoop(1000000)
실행 위치에 관계없이 406 밀리 초로 실행됩니다. 루프에서 클라이언트와 통신이없는 것 같습니다.