【发布时间】:2014-01-11 19:34:35
【问题描述】:
如果已在其他地方回答过此问题,请发布指向它的链接,对我大喊大叫,然后关闭此问题。我环顾四周,看到了类似的东西,但没有找到我要找的东西。
我目前正在编写几个需要来自另一个数据库的数据的存储过程。该数据库可以在另一台服务器或同一台服务器上,它仅取决于客户的网络。我想使用同义词,这样如果我需要数据的表的位置发生变化,我可以更新同义词一次,而不必返回所有存储过程并更新它们的引用。
我想知道使用同义词的最佳方法是什么。我之前读过一篇关于 SO 的帖子,说使用视图或表时(尤其是跨链接服务器)会降低性能。这可能是由于 SQL Server 在使用同义词时能够识别表上的索引。我找不到那个帖子了,或者我会发布一个链接。建议最好的方法是为存储过程创建同义词,并将生成的数据加载到内存或临时表中。
不过,我可能没有直接了解我的事实,并希望得到一些澄清。据我所知,创建数据并将数据加载到内存表中通常占执行计划的很大一部分。使用存储过程是否值得付出额外的努力将数据加载到表中,而不是仅仅能够对视图或表运行查询?使用同义词从另一个数据库获取数据的最有效方法是什么?
谢谢!
【问题讨论】:
-
您可以使用链接服务器来执行此操作,但通常这种远程查询不是一个好主意。
-
不幸的是,我认为我别无选择,只能使用链接服务器。我的问题更多是关于从其他数据库/服务器获取数据的最佳方式是什么。从表/表中获取数据的存储过程的同义词还是表本身的同义词?
-
仅供参考:没有“内存表”之类的东西。好的,是的,在 SQL Server 2012 中从技术上讲是,但它们是非常专门化的,而不是人们在谈论 SQL 中的“内存表”时通常所说的意思服务器。 通常它们在表变量中的含义,由于各种原因被广泛认为是内存表。不是。
-
是的,内存表是一个我用错了的术语,我有点意识到这一点,但我有时会让它溜走。我的理解是临时表和表变量都存储在TempDB中。对吗?
标签: sql-server stored-procedures database-performance synonym