SQL效率问题,对比一下这两条语句,为什么效率相差这么远?

为什么SQL语句1比SQL2语句效率高很多?(其中V_MakingItemStates为一个视图)SQL语句1:SELECTXX.*FROM(SELECTMakingID... 为什么SQL语句1比SQL2语句效率高很多?(其中V_MakingItemStates为一个视图)SQL语句1:SELECT XX.* FROM ( SELECT MakingID FROM AA WITH(NOLOCK) WHERE (ISNULL(AA.ResourceID,'')<>'') AND (ISNULL(AA.ResourceID,'')='001') ) XX LEFT JOIN dbo.V_MakingItemStates ON V_MakingItemStates.MakingID=XX.MakingID WHERE (V_MakingItemStates.Status='执行中')SQL语句2: SELECT MakingID FROM AA WITH(NOLOCK) LEFT JOIN dbo.V_MakingItemStates ON V_MakingItemStates.MakingID=XX.MakingID WHERE (ISNULL(AA.ResourceID,'')<>'') AND (ISNULL(AA.ResourceID,'')='001') AND (V_MakingItemStates.Status='执行中') 展开
 我来答
simonwonn
2013-12-19 · TA获得超过375个赞
知道答主
回答量:77
采纳率:0%
帮助的人:41.7万
展开全部
我觉得你可以在查询分析器里面开启查询计划,查看一下两个语句的开销瓶颈分别在哪里。
SQL本身就会优化用户写的SQL语句,我意思是SQL不见得按照用户的优化逻辑去去数据。
针对你这两条语句,我们可以看出第一条语句里面的XX已经是根据条件筛选出来的临时表,这个时候再和V_MakingItemStates进行join操作,join操作是逐条对比的,相当于缩小了范围。而第二条语句正好相反,左连接的左面数据太多,所以SELECT MakingID FROM AA WITH(NOLOCK) 的记录越多,那么前后两种语句的性能差异越大!
追问
你能说明一下第二条语句的执行顺序吗?如果是根据Where 条件的话,两条语句的最后结果都是一样的数据!第二条语句:是全部LEFT JOIN 完之后得出所有数据 再Where 还是 更具Where 条件 得出所有复合条件的LEFT JOIN 等数据呢?总结我想问的:Select  ...From ...Left JOIN ..Where... 数据库底层是按照什么逻辑顺序处理的?
TravyLee
2013-12-19 · TA获得超过261个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:229万
展开全部
对于性能问题楼猪还是把执行计划贴出来比较好分析。但看语句,第一句明显比第二句复杂。

建议你不要在where后的检索字段使用函数
追问
两条语句条件一样(注意:dbo.V_MakingItemStates为视图)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式