我很好奇,如果在一个驻留在另一个SQL服务器实例上的表上JOINing与另一个服务器实例的同一个表的一个子集上加入,那么性能是否有任何差异。换句话说,以下两个查询的性能是否相同:
SELECT t1.CustomerName, t2.Address, t2.Phone
FROM Table1 t1
LEFT JOIN [Server X].dbo.Table2 t2 on t2.CustomerID = t1.CustomerID
和
SELECT t1.CustomerName, t2.Address, t2.Phone
FROM Table1 t1
LEFT JOIN (SELECT CustomerID, Address. Phone FROM [Server X].dbo.Table2)
t2
on t2.CustomerID = t1.CustomerID
我们可以假设Table2不仅包含这两列。我想知道如果只选择我需要的列而不是整个表上的JOINing会产生任何差别,特别是考虑到这是一个跨服务器查询。
答案 0 :(得分:1)
在我的头顶,我不确定,但没有测试它,它看起来像SQL将执行这些相同。如果您有SQL Server Management Studio并运行执行计划,则可以检查这一点。
如果内部选择更复杂,我相信顶部更有效(因为它将在同一台服务器上)。这完全取决于优化器。
答案 1 :(得分:1)
IMO,在这种情况下,两个查询都具有相同的性能。
如果你看到了执行计划。两个计划都是一样的。