我有這個疑問這需要2分鐘,甚至執行的時間並不長:有沒有什麼辦法來優化這個SQL Server查詢?
SELECT MTI.DeptID,
ShortEmployees.EmpID,
ShortEmployees.EmpName1 AS EmpName,
Sum(CASE
WHEN (BSR.BSTID = 3
AND bli.state IN (12, 13, 14)) THEN -1 * ((BLD.Qty/dbo.Getunitval(BLD.UnitID, BLD.MTID)) * BLD.Price - ((BLD.Qty/dbo.Getunitval(BLD.UnitID, BLD.MTID)) * BLD.Price * BLD.discount * 0.01))
ELSE ((BLD.Qty/dbo.Getunitval(BLD.UnitID, BLD.MTID)) * BLD.Price - ((BLD.Qty/dbo.Getunitval(BLD.UnitID, BLD.MTID)) * BLD.Price * BLD.discount * 0.01))
END) AS Total
FROM BLD
INNER JOIN BLI
ON BLD.BLNo = BLI.BLNo
INNER JOIN BSR
ON BLI.BLID = BSR.BLID
INNER JOIN ShortEmployees
ON BLI.EmpID = ShortEmployees.EmpID
INNER JOIN MTI
ON BLD.MTID = MTI.MTID
WHERE (MTI.DeptID = 'B')
AND (BLI.BLDate > Cast('2013-01-01 00:00:00' AS DATETIME))
AND (BLI.BLDate < Cast('2013-01-14 23:59:59' AS DATETIME))
AND ((BSR.BSTID = 2
AND bli.state IN (2, 6, 8, 9,
10, 12, 18))
OR (BSR.BSTID = 3
AND bli.state IN (12, 13, 14)))
GROUP BY ShortEmployees.EmpName1,
ShortEmployees.EmpID,
MTI.DeptID
ORDER BY Total DESC
我如何優化呢?
MTI:物品信息表。
BLI:賬單表。
BLD:Bill details table。
ShortEmployees:Salesmen表。
第一步是打破在更好的格式化行中查詢,以便人們甚至可以開始嘗試優化它 –
你對這些表有什麼索引? – Bridge
是的,你可以優化'dbo.Getunitval';) –