安静点吧 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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示