Sql Server - select子句中的字段顺序或内部连接中的on子句的顺序是否重要

时间:2013-05-11 15:35:04

标签: sql-server

我是sql连接的初学者,并试图了解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以前的问题,但是没有找到任何直接的答案,关于字段的排序是负责慢查询执行还是join子句的排序是负责的。另外我已经读过查询计划优化器有哪些事情要做,哪个是查询执行的最佳计划,但是我在代码片段上下文中没有合理化。

1 个答案:

答案 0 :(得分:4)

您在第一次查询中加入SalesOrderDetail时遇到问题。您正在为联接中的两个字段使用sod表别名。其中一个应该是soh。让表别名错误会导致交叉连接,这将产生巨大的记录集。