我有一个名为[ls1]
的链接服务器。
这两种选择之间的性能差异是什么:
DECLARE @Temp NVARCHAR(MAX) = N'USE Test SELECT * FROM [dbo].[Table_1] AS [t]'
EXEC (@Temp) AT [ls1]
和这一个:
SELECT *
FROM [ls1].[Test].[dbo].[Table_1]
如果服务器硬件变得更强,更弱或者等于客户端,它会有所不同吗? 我的测试在每次运行查询时都给出了不同的执行时间。有时查询1更快但有时服务器更快。为什么会这样?
答案 0 :(得分:2)
我相当肯定执行时间差异仅仅是由于网络造成的,这就是为什么即使在同一个查询中执行也会有所不同。
我认为这两者之间没有什么区别,我更喜欢第二种,因为它是“强类型”。这是我一直在使用的,到目前为止没有任何问题(除了网络问题或延迟有时 - 但这只是在处理远程服务器时发生)。
答案 1 :(得分:1)
关于性能它应该是相同的(第二个可能已经编译),但是使用第二个方法将使引擎在解析脚本时验证表。因此,如果两个语句属于同一批次,则这些行为会有所不同。
在运行时检查(执行错误):
-- Divide by zero error encountered.
SELECT
1/0
-- Could not find server 'LinkedServer' in sys.servers.
DECLARE @Temp NVARCHAR(MAX) = N'USE DataBaseName SELECT T.SomeColumn FROM SchemaName.TableName AS T'
EXEC (@Temp) AT [LinkedServer]
先检查(解析/编译错误):
-- Could not find server 'LinkedServer' in sys.servers.
SELECT
1/0
SELECT
T.SomeColumn
FROM
[LinkedServer].DataBaseName.SchemaName.TableName AS T