这是一般性问题,而不是我自己的特定数据库。
这是一个简单的数据库示例。为简单起见,我省略了数据类型,因为它们不感兴趣。
表动物:
ID, Name, Specie, OwnerID
表所有者:
ID, Name, Street, City, Country
如果我做
,现在性能会有所不同SELECT o.Name
FROM [Animals] a
INNER JOIN (SELECT ID, Name FROM [Owner]) o ON o.ID = a.OwnerID
而不是简单
SELECT o.Name
FROM [Animals] a
INNER JOIN [Owner] o ON o.ID = a.OwnerID
所以,我认为可能会有更高的性能,因为我不会在整个桌子上。 但我认为可能是SQL足够聪明,内部几乎一样。
我试着在我自己的数据库中测量它,但我无法测量到足够大的差异,以确保它不仅仅是地板噪音。
答案 0 :(得分:4)
是否存在性能差异取决于SQL Server正在使用的查询计划,而查询计划又依赖于特定的表结构,包括索引,外键约束和数据类型。这也可以根据您拥有的数据量以及分布方式而改变。
对于您发布的两个查询,假设this relatively-simple table structure and data,两个查询都有如下所示的执行计划,这意味着SQL Server对这两个查询都遵循相同的算法。
您可以使用Sql Server Management Studio来运行这些查询。寻找名为“包含实际执行计划”的工具栏按钮,启用它,然后再次运行它们。除了通常的“结果”和“消息”选项卡之外,您还将获得一个“执行计划”选项卡,显示SQL Server选择的算法的可视化表示。比较这两个计划将告诉您SQL对两个查询的行为是否相同。
有关计划及其含义的更多详情,请查看StackOverflow: how to read a execution plan in SQL Server。