luk*_*fer 2 execution-plan sql-server-2012 distributed-transactions
给定两个 Microsoft SQL 服务器:
假设ServerA有一个名为“View1”的视图:
SELECT * FROM ServerB.database.dbo.Table1 WHERE Column1 IN (1,2,3)
和一个存储过程“sp_Foo”:
SELECT * FROM View1 WHERE Column1=1
当我执行时EXEC sp_Foo
,哪个查询在哪个服务器上执行?都是在ServerB上执行的吗?都在 ServerA 上?还是在ServerB上执行的视图查询和在ServerA上执行的SP查询?
当sp_foo
执行只有一个查询:
SELECT *
FROM (
SELECT *
FROM ServerB.database.dbo.Table1
WHERE Column1 IN (1,2,3))
WHERE Column1=1;
Run Code Online (Sandbox Code Playgroud)
此查询可以针对远程扫描在本地执行,也可以远程执行。无法预测会发生什么,因为这取决于链接服务器正在使用的驱动程序通告的功能。通常,在使用 SQLNCLI 驱动程序的链接服务器上的上述查询将远程执行。由远程扫描支持的本地执行在执行计划中显示为Remote Scan Showplan operator。
更复杂的计划可以以某种方式混合执行,部分远程部分本地,例如。请参阅用于 JOIN 子句时的链接服务器行为。