簡體   English   中英

加快此SQL查詢的速度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM