【发布时间】:2017-09-19 06:31:08
【问题描述】:
在查询中包含架构所有者会提高数据库性能似乎已被广泛接受,例如:
SELECT x FROM [dbo].Foo 与 SELECT x FROM Foo.
这应该保存查找,因为 SQL Server 否则会在连接上下文中查找属于用户的 Foo 表。
今天有人告诉我,始终包含数据库名称以同样的方式提高性能,即使您正在查询您在连接字符串中选择的数据库:
SELECT x FROM MyDatabase.[dbo].Foo
这有什么道理吗?这作为编码标准有意义吗?这些(甚至是第一个例子)是否可以转化为可衡量的收益?
我们是在谈论数据库服务器上额外的字典查找与 Web 服务器(或其他客户端)上更臃肿的 SQL 和额外连接的几个周期吗?
【问题讨论】:
-
如果确实有所作为,则会增加维护问题,因为您的所有查询都包含数据库名称。使重命名数据库变得非常困难。
-
取决于你的维护。在我的特定过程中拥有完全限定的名称可以保证它以完全相同的方式运行,即使在我的测试环境中附加到不同的数据库时——在我的特定场景中,我想要测试环境。就存储过程而言,产生“生产”结果。我意识到,也许不是最佳实践,但是,我们广泛的数据存储环境在某些单独的 TEST 域中没有完全复制的、干净的、沙盒状态的对应部分——因此,我们的许多 TEST/DEV 环境充其量是虚假数据和生产数据的混合体。