sql left join 的问题

crj881207 2012-04-21 02:40:42
Select T1.*, T2.NO AS PORNO, T2.Status AS PORStatus,T3.NO AS PONO, T3.Status AS POStatus,
T4.Thickness AS ThicknessBOM
From PORMaterials as t1
LEFT JOIN SteelMaterials AS T4 ON T1.PatNo = T4.PatNo
LEFT JOIN PORRecords AS T2 ON T1.PORID = T2.ID
LEFT JOIN PORecords AS T3 ON T1.POID = T3.ID
WHERE T1.ArriveStatus = '在途' And T3.Status = '已审批'


这是我的sql代码,但是执行效率特别低下,到现在我都不知道为什么。后来我将这串代码分成这么写,效率就高了:
--表一:#tempTable1
Select T1.*, T2.NO AS PORNO, T2.Status AS PORStatus,
T4.Thickness AS ThicknessBOM
into #tempTable1
From PORMaterials as t1
LEFT JOIN SteelMaterials AS T4 ON T1.PatNo = T4.PatNo
LEFT JOIN PORRecords AS T2 ON T1.PORID = T2.ID
WHERE T1.ArriveStatus = '在途'

--
select t1.ID,t1.PatNo,t1.POID,t1.PORNO,t2.NO as PONO,t2.Status as POStatus,t1.PORStatus,t1.ThicknessBOM
from #tempTable1 as t1
left join
PORecords as t2
on (t1.POID=t2.ID)
where T2.Status = '已审批'

后来的代码意思是这样的,分开的上面这个#tempTable1存放的是前两个 left join的表和主表联合的结果。
下面的代码是将第三个表进行联合查。 结果分开的效率高很多。。我不知道为什么会这样,按道理应该是相同的啊!
求高手解答疑惑啊!小弟感激不尽!
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
simonxt 2012-04-22
  • 打赏
  • 举报
回复
这个就是临时表的一大好处。
存放临时结果集,相当于分步骤运算结果,这样比所有连接一起运算要快很多。
有时结果集数据量(字段及记录数)很小的话,还可以存放到表变量,通过表变量再做运算也相当快的。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧