Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用聚合加快查询速度?_Sql_Sql Server_Aggregate - Fatal编程技术网

Sql 如何使用聚合加快查询速度?

Sql 如何使用聚合加快查询速度?,sql,sql-server,aggregate,Sql,Sql Server,Aggregate,如果select部分中使用了多个聚合,那么下面的查询似乎运行得很慢。有什么方法可以优化这一点吗 查询返回168行,需要1秒才能完成,但当两个用户同时加载页面,并且原始查询有更多的聚合,这也会增加查询的秒数时,查询就会陷入停滞 *****更新这里有一个更简单的查询** Select gocm.CustomerID, sum(DISTINCT o.OrderTotal) as TotalOfOrders from GroupOrder_Customer_Mapping gocm

如果select部分中使用了多个聚合,那么下面的查询似乎运行得很慢。有什么方法可以优化这一点吗

查询返回168行,需要1秒才能完成,但当两个用户同时加载页面,并且原始查询有更多的聚合,这也会增加查询的秒数时,查询就会陷入停滞

*****更新这里有一个更简单的查询**

Select 
    gocm.CustomerID,
    sum(DISTINCT o.OrderTotal) as TotalOfOrders
from GroupOrder_Customer_Mapping gocm
    Left Join [Order] o on o.CreatedForCustomerID = gocm.customerid and o.grouporderid = 8254
where gocm.grouporderid = 8254
    group by gocm.CustomerID, invitePath
    order by invitepath 
执行计划

返回以下数据(示例结果)
这可能对您有所帮助-

SELECT 
      gocm.CustomerID
    , o.TotalOfOrders 
FROM (
    SELECT DISTINCT gocm.CustomerID, invitePath
    FROM dbo.GroupOrder_Customer_Mapping gocm
    WHERE gocm.grouporderid = 8254
) gocm 
LEFT JOIN (
    SELECT 
          o.CreatedForCustomerID
        , TotalOfOrders = SUM(DISTINCT o.OrderTotal) 
    FROM dbo.[Order] o
    WHERE o.grouporderid = 8254
    GROUP BY o.CreatedForCustomerID
) o ON o.CreatedForCustomerID = gocm.customerid 
ORDER BY invitepath 

这可能对你有帮助-

SELECT 
      gocm.CustomerID
    , o.TotalOfOrders 
FROM (
    SELECT DISTINCT gocm.CustomerID, invitePath
    FROM dbo.GroupOrder_Customer_Mapping gocm
    WHERE gocm.grouporderid = 8254
) gocm 
LEFT JOIN (
    SELECT 
          o.CreatedForCustomerID
        , TotalOfOrders = SUM(DISTINCT o.OrderTotal) 
    FROM dbo.[Order] o
    WHERE o.grouporderid = 8254
    GROUP BY o.CreatedForCustomerID
) o ON o.CreatedForCustomerID = gocm.customerid 
ORDER BY invitepath 

如果数据不经常更新,你可能会考虑一个.

< P>如果数据不经常更新,你可能会考虑一个.< /p>你能包括执行计划吗?<代码>和(不同的命令总数)< /C>?如果两个人下了10美元的订单,你应该只计算其中一个?为什么你要做左连接而不是内部连接?哦,不-客户属性如FirstName和LastName的EAV。为什么这些不存储在客户表中?您是否打算拥有大量匿名客户?@chobo首先告诉我们您希望查询返回什么,因为我认为您的查询没有意义。您能包括执行计划吗?SUM(DISTINCT OrderTotal)是什么意思?如果两个人下了10美元的订单,你应该只计算其中一个?为什么你要做左连接而不是内部连接?哦,不-客户属性如FirstName和LastName的EAV。为什么这些不存储在客户表中?你有没有想过会有一大堆无名客户?@chobo首先告诉我们你希望你的查询返回什么,因为我认为你的查询没有意义。这几乎是即时的!非常感谢。我倾向于左连接中的一个子查询,但无法使其工作:)这几乎使它立即生效!非常感谢。我倾向于左连接中的子查询,但无法使其工作:)