[link text][1][link text][2]
Hi! I have a few queries that I really need to improve the performance on because they take too long to return the data.
How could I improve the following query?
DECLARE @FromDate Datetime;
DECLARE @ToDate Datetime;
DECLARE @cID Int;
set @FromDate = '1/1/2015';
set @ToDate = '4/30/2015';
set @cID = '50113';
Select s.shipped_date AS ShipDate
,s.invoice_id AS InvoiceID
,s.invoiced_date AS InvoiceDate
,s.packlist_id AS PackListID
,c.id AS CustID
,c.name AS CustName
,sr.id AS SalesRepID
,sr.name AS SalesRepName
,CLD.User_5 AS DSPromiseDate
,col.promise_date AS LinePromise
,co.promise_date AS OrderPromise
,co.create_date AS OrderDate
,co.id AS OrderID
,col.line_no AS OrderLineNo
,ShippedQty =
CASE WHEN sld.line_no is not NULL THEN sld.shipped_qty
ELSE sl.shipped_qty
END
,sl.unit_price AS UnitPrice
,total_amt_shipped =
case WHEN sld.line_no is not NULL THEN sl.unit_price * sld.shipped_qty
WHEN col.total_amt_shipped = rl.amount THEN col.total_amt_shipped
ELSE sl.unit_price * sl.shipped_qty
End
,total_amt_invoiced =
CASE WHEN s.invoice_id is not null and rl.amount is not null THEN rl.amount END,
case WHEN sld.line_no is not NULL THEN sl.unit_price * sld.shipped_qty
WHEN s.invoice_id is not null and rl.amount is null THEN sl.unit_price * sl.shipped_qty
WHEN s.invoice_id is null THEN sl.unit_price * sl.shipped_qty
Else rl.amount
End
,col.part_id AS PartID
,PurFab =
CASE WHEN p.Purchased = 'Y' THEN 'P'
WHEN p.Fabricated = 'Y' THEN 'F'
ELSE ''
END
,p.user_1 AS LicenseCode
,p.commodity_code As CommodityCode
,ReasonCode =
CASE WHEN CLD.User_2 is not NULL THEN CLD.User_2
WHEN COL.User_4 is not NULL THEN COL.User_4
ELSE ''
END
,p.planner_user_id AS PlannerID
,CompareDate =
CASE
WHEN ISDATE(CLD.Desired_Ship_Date) = 1 THEN CLD.Desired_Ship_Date
WHEN ISDATE(CLD.User_5) = 1 THEN CLD.User_5
WHEN ISDATE(COL.promise_date) = 1 THEN COL.promise_date
WHEN ISDATE(CO.promise_date) = 1 THEN CO.promise_date
END
,dbo.ParsePart(p.id,3) AS PartCondition
,ShipStatus = 'Shipped'
,co.CURRENCY_ID
,co.CUSTOMER_PO_REF
FROM DATABASE.dbo.shipper s
LEFT JOIN DATABASE.dbo.shipper_line sl
ON s.packlist_id = sl.packlist_id
LEFT JOIN DATABASE.dbo.cust_order_line col
ON sl.cust_order_id = col.cust_order_id
AND sl.cust_order_line_no = col.line_no
LEFT JOIN DATABASE.dbo.receivable_line rl
ON s.invoice_id = rl.invoice_id
AND sl.cust_order_id = rl.cust_order_id
AND sl.cust_order_line_no = rl.cust_order_line_no
LEFT JOIN ONTIC.dbo.customer_order co
ON co.id = col.cust_order_id
LEFT JOIN ONTIC.dbo.customer c
on co.customer_id = c.id
LEFT JOIN DATABASE.dbo.sales_rep sr
ON co.salesrep_id = sr.id
LEFT JOIN DATABASE.dbo.Shipper_line_del sld
ON sl.PackList_ID = sld.Packlist_ID
AND sl.cust_order_id = sld.cust_order_id
AND sl.cust_order_line_no = sld.cust_order_line_no
LEFT JOIN DATABASE.dbo.Cust_Line_DEL cld
ON cld.cust_order_id = sld.cust_order_id
AND cld.cust_order_line_no = sld.cust_order_line_no
AND cld.del_sched_line_no = sld.cust_del_line_no
LEFT JOIN DATABASE.dbo.part p
ON col.part_id = p.id
LEFT JOIN DATABASE.dbo.account a
ON a.id = col.GL_REVENUE_ACCT_ID
WHERE COL.promise_date BETWEEN @FromDate AND @ToDate and c.id = @cID
[1]: /storage/temp/2369-blexecutionplan.sqlplan
[2]: /storage/temp/2367-queryexecutionplan.sqlplan
↧