View中的链接服务器与从另一台服务器远程调用View

问题描述 投票:0回答:1

我有一个应用程序使用的一些视图,其中包含对作为链接服务器的另一台服务器的引用的负载(我将本地服务器称为“目标”,而将远程服务器称为“源”)-有点像这样:

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]数据库
  • 在[目标]数据库中创建视图
  • 使用具有合理名称的链接服务器,使用openquery在[Source]数据库中调用视图。 Create view [vw] as select * from openquery([Source],'SELECT * FROM vw') as t

这似乎是一项艰巨的工作,我担心自己的偏见会让我变得更好。您认为我将从这些变化中受益吗?也许我还需要做些其他事情来使这些观点更好,或者(上帝禁止)我应该吸纳它并继续前进-您对此有何看法?并不是说他们的表现如此差劲,以至于现在无法发表评论,但我希望事情变得尽可能整洁。

sql-server performance view linked-server openquery
1个回答
0
投票

您的代码示例建议查询中使用的所有表都驻留在一台服务器上。因此,在该服务器上创建视图似乎是一个不错的选择,因为所有的加入和填充都可以在一台服务器上本地完成-与您当前的状态相比,只有结果集需要通过链接的服务器进行传输。 >

© www.soinside.com 2019 - 2024. All rights reserved.