【问题标题】:Cross Database Stored Procedure performance considerations跨数据库存储过程性能注意事项
【发布时间】:2009-02-11 13:54:04
【问题描述】:

在我的项目中,我在同一台服务器上有两个单独的数据库。除了需要在数据库“A”中访问的数据库“B”中的三列之外,这些数据库是自给自足的。

如果我在 A 中有一个存储过程直接从 B 访问三列,是否有性能考虑?

目前,我们每晚运行一个作业,将需要的数据从表 B 导入到表 A,这样存储的 proc 就不会超出 A 的范围。

这是最好的方法吗?

跨数据库存储过程是否符合最佳实践?

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    应该没有问题,因为数据库在同一台服务器上。通常在使用链接服务器执行此操作时会出现问题,并且可能会遇到网络延迟

    【讨论】:

      【解决方案2】:

      澄清其他海报cmets。

      通过存储过程使用跨数据库访问时,没有“直接”的负面性能影响。性能将取决于各个数据库的底层架构,即可用的索引、物理存储位置等。

      这实际上是一种很常见的做法,只要您遵循标准的查询调优原则就可以了。

      【讨论】:

        【解决方案3】:

        是的,您当前正在做的事情(即复制)是“正确”的事情。

        当引用另一个数据库中的数据时,您不能使用引用完整性、数据约束和许多其他使 RDBMS 成为一个好工具的好东西。

        直接访问其他数据库会将数据库联系在一起 - 它们必须始终存在于同一台服务器上。您可能会在使用链接服务器并按需执行 proc 时遇到宽度不足的问题。

        复制为您提供了更大的灵活性。

        【讨论】:

        • 我对此赞不绝口。跨数据库查询使以后分离这些数据库变得更加困难,更不用说它们为数据库和大泥球之间的循环引用打开了大门
        【解决方案4】:

        这完全取决于您引用的数据以及是否设置了索引来支持这种直接访问。我可以告诉你的最好的事情是创建查询,运行它,看看性能是否足够好。

        如果性能不令人满意,请再次运行查询并让您的管理工具生成执行计划,以便您识别瓶颈。

        【讨论】:

          【解决方案5】:

          我们一直这样做。只要它们在同一台服务器上,就没有问题。如果您要求数据必须在数据库 a 上的表 a 中才能进入数据库 b 上的表 B 中,您将需要编写一个触发器来检查,因为不能跨数据库设置外键关系。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-16
            • 1970-01-01
            • 2011-07-09
            • 2017-01-24
            相关资源
            最近更新 更多