SQLSERVER语句多表关联查询超级慢,求优化方案!
```
SELECT distinct top 10
t0_1.FNAME as 产品型号,
t0_3.FNAME as 晶片型号,
isnull(t3.FREALQTY,0) as 销售数量,
isnull(t1.FBASEQTY,0) as 目前库存,
--工序号 10粘片 20焊线 30焊线批检 40塑封 50电镀 60切筋 70包装 80测试 90包装入库
isnull(t4_1_2.FTRANSINQTY-t4_1_2.FTRANSOUTQTY,0) as 粘片在制,
isnull(t4_2_2.FTRANSINQTY-t4_2_2.FTRANSOUTQTY,0) as 焊线在制,
isnull(t4_3_2.FTRANSINQTY-t4_3_2.FTRANSOUTQTY,0) as 焊线批检在制,
isnull(t4_4_2.FTRANSINQTY-t4_4_2.FTRANSOUTQTY,0) as 塑封在制,
isnull(t4_5_2.FTRANSINQTY-t4_5_2.FTRANSOUTQTY,0) as 电镀在制,
isnull(t4_6_2.FTRANSINQTY-t4_6_2.FTRANSOUTQTY,0) as 切筋在制,
isnull(t4_7_2.FTRANSINQTY-t4_7_2.FTRANSOUTQTY,0) as 包装在制,
isnull(t4_8_2.FTRANSINQTY-t4_8_2.FTRANSOUTQTY,0) as 测试在制,
isnull(t4_9_2.FTRANSINQTY-t4_9_2.FTRANSOUTQTY,0) as 包装入库在制,
isnull(t5_1.FREMAINSTOCKINQTY,0) as 晶片采购未回数量
FROM (
--产品
T_BD_MATERIAL t0
left join T_BD_MATERIAL_L t0_1 on (t0.FMATERIALID=t0_1.FMATERIALID)
left join T_BD_MATERIALBASE t0_2 on (t0.FMATERIALID=t0_2.FMATERIALID)
--即时库存 FLot=母批号
left join T_STK_INVENTORY t1 on (t0.FMATERIALID=t1.FMATERIALID)
--收料通知单 Flot=母批号 通过t2可以获取到原材料名称
left join T_PUR_RECEIVEENTRY t2 on (t1.FLOT=t2.FLOT)
--销售出库单 对应产品编码
left join T_SAL_OUTSTOCKENTRY t3 on (t3.FMATERIALID=t0.FMATERIALID)
--原材料名称(晶片)
left join T_BD_MATERIAL_L t0_3 on (t2.FMATERIALID=t0_3.FMATERIALID)
--工序计划 - 10粘片
left join T_SFC_OPERPLANNING t4_1 on (t4_1.FLOT=t1.FLOT)
left join V_SFC_OPTPLANOPERF8 v4_1 on (v4_1.fid=t4_1.FID)
left join T_SFC_OPERPLANNINGDETAIL t4_1_1 on (v4_1.FOPERNUMBER=t4_1_1.FOPERNUMBER and t4_1_1.FOPERNUMBER=10)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_1_2 on (t4_1_1.FDETAILID=t4_1_2.FDETAILID)
--工序计划 - 20焊线
left join T_SFC_OPERPLANNINGDETAIL t4_2_1 on (v4_1.FOPERNUMBER=t4_2_1.FOPERNUMBER and t4_2_1.FOPERNUMBER=20)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_2_2 on (t4_2_1.FDETAILID=t4_2_2.FDETAILID)
--工序计划 - 30焊线批检
left join T_SFC_OPERPLANNINGDETAIL t4_3_1 on (v4_1.FOPERNUMBER=t4_3_1.FOPERNUMBER and t4_3_1.FOPERNUMBER=30)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_3_2 on (t4_3_1.FDETAILID=t4_3_2.FDETAILID)
--工序计划 - 40塑封
left join T_SFC_OPERPLANNINGDETAIL t4_4_1 on (v4_1.FOPERNUMBER=t4_4_1.FOPERNUMBER and t4_4_1.FOPERNUMBER=40)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_4_2 on (t4_4_1.FDETAILID=t4_4_2.FDETAILID)
--工序计划 - 50电镀
left join T_SFC_OPERPLANNINGDETAIL t4_5_1 on (v4_1.FOPERNUMBER=t4_5_1.FOPERNUMBER and t4_5_1.FOPERNUMBER=50)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_5_2 on (t4_5_1.FDETAILID=t4_5_2.FDETAILID)
--工序计划 - 60切筋
left join T_SFC_OPERPLANNINGDETAIL t4_6_1 on (v4_1.FOPERNUMBER=t4_6_1.FOPERNUMBER and t4_6_1.FOPERNUMBER=60)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_6_2 on (t4_6_1.FDETAILID=t4_6_2.FDETAILID)
--工序计划 - 70包装
left join T_SFC_OPERPLANNINGDETAIL t4_7_1 on (v4_1.FOPERNUMBER=t4_7_1.FOPERNUMBER and t4_7_1.FOPERNUMBER=70)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_7_2 on (t4_7_1.FDETAILID=t4_7_2.FDETAILID)
--工序计划 - 80测试
left join T_SFC_OPERPLANNINGDETAIL t4_8_1 on (v4_1.FOPERNUMBER=t4_8_1.FOPERNUMBER and t4_8_1.FOPERNUMBER=80)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_8_2 on (t4_8_1.FDETAILID=t4_8_2.FDETAILID)
--工序计划 - 90包装入库
left join T_SFC_OPERPLANNINGDETAIL t4_9_1 on (v4_1.FOPERNUMBER=t4_9_1.FOPERNUMBER and t4_9_1.FOPERNUMBER=90)
--转入转出
left join T_SFC_OPERPLANNINGDETAIL_B t4_9_2 on (t4_9_1.FDETAILID=t4_9_2.FDETAILID)
--采购订单(剩余入库数量)
left join T_PUR_POORDERENTRY t5 on (t5.FMATERIALID=t0.FMATERIALID and t5.FLOT=t1.FLOT)
left join T_PUR_POORDERENTRY_R t5_1 on (t5.FID=t5_1.FID)
)
where t0_2.FERPCLSID=2 and t0_3.FNAME is not null
order by t0_1.FNAME desc
```
做的是一个关联查询报表,因为数据量庞大,在服务器上查询一遍
大概要10分钟。。。新手码农求大佬优化解答一下,虚心请教