繁体   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