加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:54:41 所属栏目:MsSql教程 来源:网络整理
导读:我的google-fu和so-fu在这里没有,所以我也可以问. 我有很多查询,其中有多个连接. 在一个查询中,我一起加入标题/项目/细节,以及查找这些记录的各种信息. 加入时,我尽量保持事物的顺序如何相关.例如:我的标题有两个查询表,所以我加入到我的项目表之前加入. 那
我的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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读