假设我运行以下查询:
declare @i integer
set @i=1
while @i < 2000000
BEGIN
insert into t1 (ID,DESC,date) values (@i%200,concat(NEWID(),newid()),GETDATE())
set @i = @i +1
END
循环实际上是在客户端机器上运行,并且每次都通过网络调用插入,还是循环在服务器上运行并且只进行本地调用?
同样,通过使用 SSMS 连接到服务器或使用 RDP 连接到服务器并使用本地 SSMS 实例来运行此类查询更好吗?
SQL Server Management Studio 仅将查询(或 T-SQL 过程)发送到服务器并等待结果。
从 LAN 或直接在服务器上运行它是有区别的,因为结果必须在您的 PC 上传输(所以区别只是在 LAN 上传输数据的时间)。(此外,在第一种情况下,您的 PC 必须在整个查询期间打开。)
检查这一点的一种简单方法是在执行语句时运行 SQL Profiler。如果您只是使用默认跟踪设置运行,您将看到与此语句相关的几个结果:一个 SQL:BatchStarting 和一个 SQL:BatchCompleted。两者都将实际查询作为 TextData。这意味着 SSMS没有执行循环;SQL 服务器是。正如 AndreaCi 指出的那样,SSMS 只是传递查询文本并告诉服务器执行它需要的任何操作。
关于如何执行查询,我建议不要直接登录到服务器并在那里运行 SSMS(实际上,我建议根本不要在服务器上安装 SSMS,但这是另一个问题的另一个主题)。原因是 RDP 和 SSMS 使用服务器资源,因此专用于运行客户端软件的 RAM 和 CPU 周期不会进入 SQL Server,从而使每个人的合法服务器处理速度稍微慢一些。