sql-server – TSQL – 加入表的正确顺序是什么?

前端之家收集整理的这篇文章主要介绍了sql-server – TSQL – 加入表的正确顺序是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的google-fu和so-fu在这里没有,所以我也可以问.

我有很多查询,其中有多个连接.

在一个查询中,我一起加入标题/项目/细节,以及查找这些记录的各种信息.

加入时,我尽量保持事物的顺序如何相关.例如:我的标题有两个查询表,所以我加入到我的项目表之前加入.

那是对的吗?

在查找表之前加入更大的表格是否更好?或相反亦然?

加入小表时应该使用循环提示,加入公开内容时是否使用合并提示

我确定答案是“依赖”,但是一些有效和高效地加入的一般准则将是非常有帮助的.谢谢!

解决方法

编辑:根据您的问题(和Kirk Woll的)评论,您应该明白 order of your joins is aesthetic,and does not directly impact the resulting execution plan.查询优化器将以最有效的顺序执行连接,并且在绝大多数时间内使用适当的连接操作,而无需任何提示.

当你的连接命令的美学方面,这是一个主观的,但我会说,加入你的表在一起,无论什么顺序,当阅读查询时,逻辑意义…如果你开始一个@HeaderId,从那个表开始,然后JOIN给孩子表:

FROM
    Header h
    JOIN Items i ON h.HeaderId = i.HeaderId
    JOIN Details d ON i.ItemId = d.ItemId
WHERE
    h.HeaderId = @HeaderId

但是,如果您使用@DetailId开始查询,我将以相反的顺序加入.

FROM
    Details d
    JOIN Items i ON d.ItemId = i.ItemId
    JOIN Header h ON i.HeaderId = h.HeaderId
WHERE
    d.DetailId = @DetailId

然而,这是主观的,只是我个人的喜好.

当您开始包含OUTER JOIN …时,它变得不太主观…尝试构造您的查询以避免任何RIGHT OUTER JOIN,而使用LEFT OUTER JOIN.

默认情况下不要使用连接提示…实际上你几乎不会使用它们.查询优化器在选择最佳执行计划方面做得很好.我只遇到一个实例,我需要提供一个改进计划的连接提示…它在当时正在运行查询的服务器上大幅度地帮助,但是当数据库迁移到其他服务器时,我的加入提示破坏了查询性能.所以,要重申,提供连接提示通常是一个坏主意.

猜你在找的MsSQL相关文章