加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用完全限定名称会影响性能吗?

发布时间:2020-12-12 16:57:01 所属栏目:MsSql教程 来源:网络整理
导读:在SQL Server中使用完全限定的表名对性能有任何影响吗? 我有一个查询,我加入了不同数据库中的两个表,DBA建议省略主机查询上的数据库名称,我猜这是用于性能或惯例. 所有表完全合格 USE [DBFoo]SELECT * FROM [DBFoo].[dbo].[people] aINNER JOIN [DBBar].[dbo
在SQL Server中使用完全限定的表名对性能有任何影响吗?

我有一个查询,我加入了不同数据库中的两个表,DBA建议省略主机查询上的数据库名称,我猜这是用于性能或惯例.

所有表完全合格

USE [DBFoo]
SELECT * FROM [DBFoo].[dbo].[people] a
INNER JOIN [DBBar].[dbo].[passwords] b on b.[EntityID] = a.[EntityID]

首选?

USE [DBFoo]
SELECT * FROM [dbo].[people] a
INNER JOIN [DBBar].[dbo].[passwords] b on b.[EntityID] = a.[EntityID]

这是否真的有所作为?

解决方法

通常首选使用完全限定名称,但有一些注意事项适用.我会说这很大程度上取决于要求,一个答案可能不足以满足所有的情况.

请注意,这只是一个编译绑定,而不是一个执行的绑定.因此,如果您执行相同的查询数千次,只有第一次执行会“查找”查找时间,这意味着在完全限定名称的情况下,查找时间较少.这也意味着使用完全限定名将保存编译开销(执行查询时的第一次).

其余的将重用已编译的名称,其中名称被解析为对象引用.

这个MSDN Article给出了SQL Server最佳实践的公平指导. (检查名为:如何参考对象的部分)

此链接更详细地介绍了在执行之前完成的步骤,以解决和验证对象引用:http://blogs.msdn.com/b/mssqlisv/archive/2007/03/23/upgrading-to-sql-server-2005-and-default-schema-setting.aspx

通过第二个链接,结论说:

Obviously the best practice still stands: You should fully qualify all object names and not worry about the name resolution cost at all. The reality is,there are still many imperfect applications out there and this setting help great for those cases.

另外,如果在生产环境中不允许数据库名称更改,则可以考虑将数据库名称包含在完全限定名称中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读