安静点吧 2021-12-29 11:04 采纳率: 100%
浏览 24
已结题

悬赏:MSSQL 表连接长语句性能优化案例求解答?

十分钟调用一次服务器数据库的长SQL语句,当数据量逐渐增大,运行效率是否会下降?求该怎么优化??
(注释:D表为所有物料的限制车数,F为采购,销售合并的厂内车数,SIP_ScaleSales和SIP_ScalePurch 为流水,会逐渐增大 )

select D.FItemName,D.FLimitNum,ISNULL(F.FCurrentNum,0) FCurrentNum from
( select FItemName,FLimitNum from SIP_MaterialInsLimit WHERE FCancel =0 AND FDeleted = 0) D
LEFT JOIN
(
select A.FItemName,A.FLimitNum,COUNT(B.FID) FCurrentNum from SIP_MaterialInsLimit AS A
inner join SIP_ScalePurch AS B on A.FItemID = B.FItemID
Where A.FClassTypeID = 2 group by A.FLimitNum,A.FItemName
UNION
select A.FItemName,A.FLimitNum,COUNT(B.FID) FCurrentNum from SIP_MaterialInsLimit AS A
inner join SIP_ScaleSales AS B on A.FItemID = B.FItemID
Where A.FClassTypeID = 1 group by A.FLimitNum,A.FItemName
) F ON D.FItemName=F.FItemName

img

该怎么做才能让SQL运行效率提高?

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-29 15:33
    关注

    一:最显眼的,把union 改成 union all试试
    二:你这sql写得太繁杂了,同一个表查了3次,而且3张表的关联条件明明就是FItemID,为啥还要转换成FItemName去关联?还有,如果同一个物料在销售和采购里都有数据,你这一匹配不会导致缺失或者翻倍?不是应该求和后再匹配么?还有一个问题,既然是流水表,难道每次都要对历史数据进行全量统计,就没个时间范围么?
    慢不是因为sql长,而是这个sql本就写得有问题。
    你比较一下下面这个sql和你的区别

    select a.FItemName,
               a.FLimitNum,
               ISNULL( v.FCurrentNum, 0 ) FCurrentNum 
        from SIP_MaterialInsLimit a left join 
        (select FItemID ,sum(FCurrentNum) FCurrentNum from 
        (select FItemID,count(1) FCurrentNum from SIP_ScalePurch group by FItemID 
        union all
        select FItemID,count(1) FCurrentNum from SIP_ScaleSales group by FItemID ) b) v
      on a.FItemID=v.FItemID
        where a.FCancel = 0 AND a.FDeleted = 0;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 有问必答小助手 2022-12-30 11:20
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月29日

悬赏问题

  • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
  • ¥30 各位help写一下代码
  • ¥15 在运行SDEdit模型下载不了
  • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
  • ¥15 电脑连上WIFI却用不了
  • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
  • ¥15 hyper-v出现的问题
  • ¥15 有能用的可加酬金,求可以批量下载懒人听书的软件,能登录自己帐号的。
  • ¥100 高博一起做RGB-D SLAM(5)VO无法出visualisation问题
  • ¥15 使用matlab进行手眼标定的仿真验证,得到齐次矩阵与opencv相差较大