View 中的链接服务器与从另一台服务器远程调用 View
Posted
技术标签:
【中文标题】View 中的链接服务器与从另一台服务器远程调用 View【英文标题】:Linked Server in View vs calling View Remotely from Another Server 【发布时间】:2020-02-05 09:39:23 【问题描述】:我有一些应用程序使用的视图,其中包含对单个其他服务器的大量引用,作为链接服务器(我将调用本地服务器“目标”和远程服务器“源”) - 有点像这样:
SELECT
--[Columns]
FROM
[Source].[s_db].[dbo].[a_table] A
INNER JOIN [Source].[s_db].[dbo].[b_table] B ON A.[Id] = B.[Id]
LEFT JOIN [Source].[s_db].[dbo].[c_table] C ON B.[Id2] = C.[Id]
INNER JOIN [Source].[s_db].[dbo].[d_table] D ON C.[Id2] = D.[Id]
INNER JOIN [Source].[s_db].[dbo].[e_table] E ON D.[Id2] = E.[Id]
---- and so on
我讨厌这些观点,我想知道我是有道理还是有偏见。
有没有更好的方法来编写这些(性能、整洁、发布到不同服务器的能力等)?
到目前为止,我的想法是:
为源 [Source_Companion] 创建一个伴随数据库,在 远程服务器 在 [Source_Companion] 数据库中重新创建视图, 引用 [Source] 数据库 在 [Target] 数据库中创建视图 使用 openquery 调用 [Source] 数据库中的视图,并带有一个合理命名的链接服务器。Create view [vw] as select * from openquery([Source],'SELECT * FROM vw') as t
这似乎是一项艰巨的工作,我担心我只是让我的偏见占了上风。你认为我会从这些变化中看到任何好处吗?也许我应该做些其他的事情来改善这些观点,或者(上帝保佑)我应该把它吸干然后继续前进——你的意见是什么?他们现在的表现并没有那么糟糕以至于引起评论,但我希望事情尽可能好和整洁。
【问题讨论】:
【参考方案1】:您的代码示例建议查询中使用的所有表都驻留在一台服务器上。因此,在该服务器上创建视图似乎是一个不错且合法的选择,因为所有加入和操作都可以在一台服务器上本地完成 - 与您拥有的当前状态相比,只有结果集需要通过链接服务器传输。
【讨论】:
是的,这就是我考虑这样做的原因,但是......你认为我会从这些变化中看到任何好处吗? 这取决于几件事,但您当前的设置可能会导致您加入的整个表被临时传输到托管视图的服务器。还可能取决于 SQL Server 的版本、链接服务器配置和建立链接服务器连接的用户的权限,当涉及到在托管数据的服务器上使用统计信息等的可能性时。底线是,是的,您可能会看到巨大的好处,但它也可能产生非常小的差异。您必须对其进行测试。 是的,公平点。我想我会选择我认为好的做法,然后处理后果。以上是关于View 中的链接服务器与从另一台服务器远程调用 View的主要内容,如果未能解决你的问题,请参考以下文章
禁用“允许远程连接到此服务器”后,我仍然可以从另一台机器连接