[英]Speeding up this SQL query
我有以下(相當傳統,在一兩年前完成)SQL查詢。 SQL所在的網頁(在ASP.NET中的SqlDataSource / GridView上使用)非常慢,而且我已查明此查詢的速度-似乎是因為選擇了sub。 我曾嘗試使用連接來加快速度,但無法使其正常工作。 有任何想法嗎?
我不會將整個查詢放在這里,僅是因為我在無法訪問互聯網的機器上工作,所以我將無法復制和粘貼,並且大多數只是從主表中進行選擇。
SELECT ...,
CASE
WHEN di.Total = di.Delivered THEN 'Received'
ELSE 'Not Received' END AS 'Status',
...
FROM Deliveries AS d
LEFT OUTER JOIN (
SELECT Delivery,
COUNT(*) AS Total,
COUNT(CASE WHEN Status = 2 THEN 1 END) AS Delivered
FROM DeliveryItems
GROUP BY Delivery
) AS di ON d.ID = di.Delivery
有小費嗎?
SELECT Delivery,
COUNT(*) AS Total,
COUNT(CASE WHEN Status = 2 THEN 1 END) AS Delivered
FROM DeliveryItems
GROUP BY Delivery
可以通過放棄該CASE語句來改進此部分。 也許嘗試加入兩次,一次針對總計數,一次針對過濾后的計數。
SELECT ...,
CASE
WHEN d2.Total = d1.Delivered THEN 'Received'
ELSE 'Not Received' END AS 'Status',
...
FROM Deliveries AS d
LEFT OUTER JOIN (
SELECT Delivery,
COUNT(*) AS Delivered
FROM DeliveryItems
WHERE Status = 2
GROUP BY Delivery ) d1 ON d.Id = d1.Delivery
LEFT OUTER JOIN (
SELECT Delivery,
COUNT(*) AS Total
FROM DeliveryItems
GROUP BY Delivery ) d2 ON d.ID = d2.Delivery
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.