我是 sql join 的初学者,并试图了解 sql server 中的各种类型的连接。我的查询与我刚刚使用 AdventureWorks2008 数据库在 sql server 2012 中输入的以下两段代码有关。然而,代码片段只需要很长时间(我现在已经让它执行了大约 45 分钟)而没有结果集。然而,代码片段 2 会在瞬间快速运行并输出结果集。我只是对问题所在感到困惑。
这是代码。
代码段一..(这需要很长时间执行而没有结果集)
select
pro.ProductID
,pro.Name
,soh.OrderDate
,soh.SalesOrderID
from Sales.SalesOrderHeader soh
inner join Sales.SalesOrderDetail sod on sod.SalesOrderID = sod.SalesOrderID
inner join Production.Product pro on pro.ProductID = sod.ProductID
order by soh.SalesOrderID
代码片段二(这个跑得很快)
`select soh.SalesOrderId
,soh.orderDate
,p.ProductId
,p.name
from sales.SalesOrderHeader as soh
inner join sales.SalesOrderDetail as sod on soh.SalesOrderID = sod.SalesOrderID
inner join Production.Product as p on sod.ProductID = p.ProductID
order by soh.SalesOrderId`
任何帮助/提示表示赞赏。我已经研究了 stackoverflow 之前的所有问题,但没有找到任何直接的答案,即字段的顺序是导致查询执行速度慢还是连接子句的顺序负责。我还读到查询计划优化器与哪个是查询执行的最佳计划有关,但是我未能在我的代码片段上下文中合理化。