如何在SQL Server中强制联接顺序

如何在SQL Server中强制联接顺序,sql,sql-server,oracle,Sql,Sql Server,Oracle,当我们将t1加入t2加入t3加入t4时,我们可以: t3->t4->t2->t1 t1->t2->t3->t4 t4->t3->t2->t1 ..... 有没有办法强制SQL Server中的优化器从连接链中的特定表开始?有点像在甲骨文中领先 我正在寻找一种类似SQL Server中的leading(在Oracle中)的解决方案。这里有强制顺序提示: SELECT * FROM T1 JOIN T2 ON T1.ID = T2.T1_ID

当我们将
t1
加入
t2
加入
t3
加入
t4
时,我们可以:

t3->t4->t2->t1
t1->t2->t3->t4
t4->t3->t2->t1
.....
有没有办法强制SQL Server中的优化器从连接链中的特定表开始?有点像在甲骨文中领先


我正在寻找一种类似SQL Server中的leading(在Oracle中)的解决方案。

这里有强制顺序提示:

SELECT * FROM T1 JOIN T2 ON T1.ID = T2.T1_ID OPTION (FORCE ORDER)

有强制命令提示:

SELECT * FROM T1 JOIN T2 ON T1.ID = T2.T1_ID OPTION (FORCE ORDER)

如果除了联接的顺序之外,您还知道联接的类型,那么您可以显式地:

SELECT *
FROM T1 HASH JOIN
     T2
     ON T1.ID = T2.T1_ID;
这将强制排序以及类型(请参阅)


如果要在不强制执行顺序的情况下指定特定类型联接的使用,请改用
选项
。并且,如果您想要订购而不是类型,请使用
强制订购
。但是,SQL Server优化器通常非常好,因此很少需要强制顺序。

如果除了连接的顺序之外,您还知道连接的类型,那么您可以明确:

SELECT *
FROM T1 HASH JOIN
     T2
     ON T1.ID = T2.T1_ID;
这将强制排序以及类型(请参阅)



如果要在不强制执行顺序的情况下指定特定类型联接的使用,请改用
选项
。并且,如果您想要订购而不是类型,请使用
强制订购
。但是,SQL Server优化器通常非常好,因此很少需要强制顺序。

从用作join@tinka,这真的很重要吗?@jarlh是的,如果我们根据主键(PK)筛选页面,那就太好了应该是哪一个first@tinkaPK代表主键吗?从作为主键使用的从属PK表开始join@tinka,这真的很重要吗?@jarlh是的,如果我们根据主键(PK)筛选页面,那就太好了应该是哪一个first@tinkaPK代表主键吗?我正在寻找除强制命令之外的解决方案你的意思是只强制表的子集,而不是全部?我想从t2开始,然后我想唯一的选择是提供你自己的执行计划。我正在寻找除强制命令之外的解决方案你的意思是要强制只是表格的子集,但不是全部?我想从t2开始举例,然后我想唯一的选择是提供你自己的执行计划。一般来说,你是很棒的先生。一般来说,你是很棒的先生。