是否有一种方法可以使查询中的表比另一种更“优化”?

时间:2013-09-20 09:20:52

标签: sql-server sql-server-2008

  

编辑: 我知道SELECT * is bad practice,但这里使用的只是将示例SQL集中在表语句而不是其余的查询。如果您愿意,可以将它更换为一些列名。

给定数据库服务器MyServer(我们目前在SSMS中连接),包含多个数据库MyDb1MyDb2MyDb3等,并且默认模式{{1以下任何等效查询(它们都会返回完全相同的结果集)是否比其他查询更“理想”?

dbo

我被告知此方法(显式提供包含服务器名称的完整数据库名称)将SELECT * FROM MyServer.MyDb1.dbo.MyTable 视为链接服务器并导致查询运行得更慢。这是真的吗?


MyServer

服务器名称不是必需的,因为我们已经连接到服务器名称,但是它会比上面“更快”运行吗?


SELECT * FROM MyDb1.dbo.MyTable

说明我们最初使用的数据库。我无法想象这对于单个查询来说比前一个更好,但是对于同一个数据库上的后续查询会更好(即,如果我们在此下面以相同格式有更多USE MyDb1 GO SELECT * FROM dbo.MyTable 个语句)?


SELECT

如上所述,但省略了默认架构。我认为这没有任何区别。是吗?

1 个答案:

答案 0 :(得分:0)

如果未指定完全限定名称,SQL Server将始终在当前“上下文”中查找您分离的对象。

一个比另一个更快,当然,与硬盘驱动器上的文件名相同“这是一个非常长的文件名,但只要它低于254就是ok.txt”将会占用比“x.txt”更多的硬盘(toc)空间。你有没有注意到它,不!

就“USE”关键字而言,这只是为您设置上下文,因此您不必完全限定对象名称。 “USE”关键字不是sql,你不能在另一个应用程序(如vb / c#app)或存储过程中使用但它就像“GO”关键字一样,它告诉SSMS做某事,改变上下文