簡體   English   中英

我該如何重寫此查詢以加快執行速度

[英]How can i rewrite this query for faster execution

SELECT s1.ID FROM binventory_ostemp s1 JOIN 
( SELECT Cust_FkId, ProcessID, MAX(Service_Duration) AS duration 
 FROM binventory_ostemp WHERE ProcessID='4d2d6068678bc' AND Overall_Rank IN 
 (
  SELECT MIN(Overall_Rank) FROM binventory_ostemp WHERE ProcessID='4d2d6068678bc' GROUP BY Cust_FkId
 )
 GROUP BY Cust_FkId
) AS s2 ON s1.Cust_FkId = s2.Cust_FkId AND s1.ProcessID=s2.ProcessID 
AND s1.Service_Duration=s2.duration AND s1.ProcessID='4d2d6068678bc' 
GROUP BY s1.Cust_FkId

如果該表中的行數超過1萬,它就會消失。 它的作用是為有最低收入的每個客戶查找行。 總排名中的最高 給定processid的服務持續時間

表數據

ID Cust_FkId  Overall_Rank Service_Duration  ProcessID
1     23       2            30             4d2d6068678bc
2     23       1            45             4d2d6068678bc
3     23       1            60             4d2d6068678bc
4     56       3            90             4d2d6068678bc
5     56       2            50             4d2d6068678bc
6     56       2            85             4d2d6068678bc

結果數據

結果ID值只能為36

選擇以下內容可能會更快。

(覆蓋)索引

  • Cust_FkID,總體排名
  • Cust_FkID,Service_Duration
  • Cust_FkID,總體排名,服務時間
  • 總體排名
  • 服務持續時間

通過查看執行計划,刪除不使用的索引。

SQL語句

SELECT  b.*
FROM    binventory_ostemp b
        INNER JOIN (
          SELECT  b.Cust_FkID
                  , ovr.Overall_Rank
                  , MAX(Service_Duration) AS Service_Duration 
          FROM    binventory_ostemp b
                  INNER JOIN (
                    SELECT  Cust_FkID
                            , MIN(Overall_Rank) AS Overall_Rank
                    FROM    binventory_ostemp        
                    GROUP BY
                            Cust_FkID
                  ) ovr ON  ovr.Cust_FkID = b.Cust_FKID
                            AND ovr.Overall_Rank = b.Overall_Rank        
          GROUP BY
                  b.Cust_FkID
                  , ovr.Overall_Rank
        ) ovrs ON ovrs.Cust_FkID = b.Cust_FkID
                  AND ovrs.Overall_Rank = b.Overall_Rank
                  AND ovrs.Service_Duration = b.Service_Duration

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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