编辑: 我知道
SELECT *
is bad practice,但这里使用的只是将示例SQL集中在表语句而不是其余的查询。如果您愿意,可以将它更换为一些列名。
给定数据库服务器MyServer
(我们目前在SSMS中连接),包含多个数据库MyDb1
,MyDb2
,MyDb3
等,并且默认模式{{1以下任何等效查询(它们都会返回完全相同的结果集)是否比其他查询更“理想”?
dbo
我被告知此方法(显式提供包含服务器名称的完整数据库名称)将SELECT * FROM MyServer.MyDb1.dbo.MyTable
视为链接服务器并导致查询运行得更慢。这是真的吗?
MyServer
服务器名称不是必需的,因为我们已经连接到服务器名称,但是它会比上面“更快”运行吗?
SELECT * FROM MyDb1.dbo.MyTable
说明我们最初使用的数据库。我无法想象这对于单个查询来说比前一个更好,但是对于同一个数据库上的后续查询会更好(即,如果我们在此下面以相同格式有更多USE MyDb1
GO
SELECT * FROM dbo.MyTable
个语句)?
SELECT
如上所述,但省略了默认架构。我认为这没有任何区别。是吗?
答案 0 :(得分:0)
如果未指定完全限定名称,SQL Server将始终在当前“上下文”中查找您分离的对象。
一个比另一个更快,当然,与硬盘驱动器上的文件名相同“这是一个非常长的文件名,但只要它低于254就是ok.txt”将会占用比“x.txt”更多的硬盘(toc)空间。你有没有注意到它,不!
就“USE”关键字而言,这只是为您设置上下文,因此您不必完全限定对象名称。 “USE”关键字不是sql,你不能在另一个应用程序(如vb / c#app)或存储过程中使用但它就像“GO”关键字一样,它告诉SSMS做某事,改变上下文