2

这是一个一般性问题,而不是针对我自己的数据库。

这是一个简单的数据库示例。为简单起见,我不考虑数据类型,因为它们不感兴趣。

餐桌动物

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 足够聪明,可以在内部做几乎相同的事情。

我试图在我自己的数据库中测量它,但我无法测量到足够大的差异,以确保它不仅仅是地板噪音。

4

1 回答 1

4

是否存在性能差异取决于 SQL Server 使用的查询计划,而这又取决于特定的表结构,包括索引、外键约束和数据类型。这也可能会根据您拥有的数据量及其分布方式而改变。

对于您发布的两个查询,假设这个相对简单的表结构和数据,两个查询都具有如下所示的执行计划,这意味着 SQL Server 对两者都遵循相同的算法。

示例执行计划

您可以使用 Sql Server Management Studio 获得这样的树来运行这些查询。寻找一个名为“包括实际执行计划”的工具栏按钮,启用它,然后再次运行它们。除了通常的“结果”和“消息”选项卡外,您还将获得一个“执行计划”选项卡,显示 SQL Server 选择的算法的这种可视化表示。比较这两个计划将告诉您 SQL 对于两个查询的行为方式是否相同。

有关计划及其含义的更多详细信息,请查看StackOverflow:如何在 SQL Server 中读取执行计划

于 2013-11-05T11:07:08.603 回答