下面的sql语句,表中最多存有80万条数据 只查25条记录 查询分析器中用时居然达到13秒
哪位大神 给我分析一下原因呢
select ROW_NUMBER() Over (order by mes_wi.AutoID desc) as rownum,
mes_wi.AutoID,b_pd.CustomerID,c.CustomerName,cwo.ProductID,b_pd.ProductName,cwo.FabDevice,cwo.Org,
cwo.WaferLot,cwo.TargetDevice,cwo.IsTax,cwo.IsReturn,mes_wo.Plan_StartTime,cwo.WONumber,cpo.Cust_PO,
mes_wi.IsArrived,mes_wi.ArrivedTime,mes_wi.CartonNo,mes_wi.IsIQC,mes_wi.IQCTime,
mes_wi.IsWIP,mes_wi.WIPTime,mes_wi.IsOutStock,mes_wi.OutStockTime,cwo.TradeType,
mes_wi.IsFGIN,mes_wi.FGINTime,mes_wi.IsScrap,mes_wi.ScrapTime,mes_wo_wi.WorkorderID,
mes_wi.IsPKG,mes_wi.PKGTime,mes_wi.IsShipping,mes_wi.ShippingTime,mes_wi.DieQty,
mes_wi.WaferNo,mes_wo.WlcspLot,mes_wi.Yield,mes_wi.LMContext,b_pd1.ProductName as WO_ProductName,mes_wi.GoodDie,mes_wi.BadDie,
Datediff(Day,(select dateadd(Hour,8,mes_wop.OutTime) as OutTime from MES_WorkorderProcess mes_wop where mes_wop.WorkorderID=mes_wo_wi.WorkorderID and mes_wop.Sequence=1 and mes_wop.Deleted=0),mes_wi.FGINTime) as ProcessCT
from MES_WaferInfo mes_wi
left outer join Customer_WO cwo on cwo.AutoID=mes_wi.CustomerWOID
left outer join Customer_PO cpo on cpo.AutoID=cwo.CustomerPOID
left outer join Base_Product b_pd on b_pd.AutoID=cwo.ProductID
left outer join Customer c on c.AutoID=b_pd.CustomerID
left outer join MES_Workorder_WaferInfo mes_wo_wi on mes_wo_wi.WaferInfoID=mes_wi.AutoID and mes_wo_wi.Deleted<>1
left outer join MES_WorkOrder mes_wo on mes_wo.AutoID=mes_wo_wi.WorkorderID
left outer join Base_Product b_pd1 on b_pd1.AutoID=mes_wo.ProductID
where mes_wi.Deleted=0 and cwo.Deleted=0 and cwo.WaferLot='H7F256'
------解决方案--------------------
把表结构和索引贴出来,最好把执行计划弄出来,估计你没有用好索引,
------解决方案--------------------
帮你整理一下格式:
- SQL code
SELECT ROW_NUMBER() OVER ( ORDER BY mes_wi.AutoID DESC ) AS rownum , mes_wi.AutoID , b_pd.CustomerID , c.CustomerName , cwo.ProductID , b_pd.ProductName , cwo.FabDevice , cwo.Org , cwo.WaferLot , cwo.TargetDevice , cwo.IsTax , cwo.IsReturn , mes_wo.Plan_StartTime , cwo.WONumber , cpo.Cust_PO , mes_wi.IsArrived , mes_wi.ArrivedTime , mes_wi.CartonNo , mes_wi.IsIQC , mes_wi.IQCTime , mes_wi.IsWIP , mes_wi.WIPTime , mes_wi.IsOutStock , mes_wi.OutStockTime , cwo.TradeType , mes_wi.IsFGIN , mes_wi.FGINTime , mes_wi.IsScrap , mes_wi.ScrapTime , mes_wo_wi.WorkorderID , mes_wi.IsPKG , mes_wi.PKGTime , mes_wi.IsShipping , mes_wi.ShippingTime , mes_wi.DieQty , mes_wi.WaferNo , mes_wo.WlcspLot , mes_wi.Yield , mes_wi.LMContext , b_pd1.ProductName AS WO_ProductName , mes_wi.GoodDie , mes_wi.BadDie , DATEDIFF(Day, ( SELECT DATEADD(Hour, 8, mes_wop.OutTime) AS OutTime FROM MES_WorkorderProcess mes_wop WHERE mes_wop.WorkorderID = mes_wo_wi.WorkorderID AND mes_wop.Sequence = 1 AND mes_wop.Deleted = 0 ), mes_wi.FGINTime) AS ProcessCTFROM MES_WaferInfo mes_wi LEFT OUTER JOIN Customer_WO cwo ON cwo.AutoID = mes_wi.CustomerWOID LEFT OUTER JOIN Customer_PO cpo ON cpo.AutoID = cwo.CustomerPOID LEFT OUTER JOIN Base_Product b_pd ON b_pd.AutoID = cwo.ProductID LEFT OUTER JOIN Customer c ON c.AutoID = b_pd.CustomerID LEFT OUTER JOIN MES_Workorder_WaferInfo mes_wo_wi ON mes_wo_wi.WaferInfoID = mes_wi.AutoID AND mes_wo_wi.Deleted <> 1 LEFT OUTER JOIN MES_WorkOrder mes_wo ON mes_wo.AutoID = mes_wo_wi.WorkorderID LEFT OUTER JOIN Base_Product b_pd1 ON b_pd1.AutoID = mes_wo.ProductIDWHERE mes_wi.Deleted = 0 AND cwo.Deleted = 0 AND cwo.WaferLot = 'H7F256'