Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server SQL Server案例语句性能不好_Sql Server - Fatal编程技术网

Sql server SQL Server案例语句性能不好

Sql server SQL Server案例语句性能不好,sql-server,Sql Server,我有一个包含多个CASE语句的查询,如下所示。即使在适当的索引之后,也需要花费大量的时间来执行。case语句上的Sum操作导致性能不佳。如何重新编写上述查询以提高性能 SELECT H.Item, SUM(CASE A.CategeoryId WHEN 123 THEN NULLIF(IIF(C.IsActive = 0 AND ( ( c.RowID IN ( 2, 4 )

我有一个包含多个CASE语句的查询,如下所示。即使在适当的索引之后,也需要花费大量的时间来执行。case语句上的Sum操作导致性能不佳。如何重新编写上述查询以提高性能

SELECT H.Item,
       SUM(CASE A.CategeoryId
             WHEN 123 THEN NULLIF(IIF(C.IsActive = 0
                                      AND ( ( c.RowID IN ( 2, 4 )
                                              AND H.SubId <> ISNULL(C.ItemId, 0) )
                                             OR ( c.RowId NOT IN ( 2, 4 )
                                                  AND H.SubId = ISNULL(C.ItemId, 0) ) ), 0, A.Sales), 0)
             ELSE 0
           END) AS [TotalSales1],
       SUM(CASE A.CategeoryId
             WHEN 198 THEN NULLIF(IIF(C.IsActive = 0
                                      AND ( ( c.RowID IN ( 2, 4 )
                                              AND H.SubId <> ISNULL(C.ItemId, 0) )
                                             OR ( c.RowId NOT IN ( 2, 4 )
                                                  AND H.SubId = ISNULL(C.ItemId, 0) ) ), 0, A.Sales), 0)
             ELSE 0
           END) AS [TotalSales2],
       '',
       '',
       '',
       '',
       ''
FROM   SubItem AS H
       INNER JOIN Item AS C WITH (NOLOCK)
               ON H.Item = C.ItemId
       LEFT OUTER JOIN #temp1 AS A
                    ON H.SubId = A.ItemId
WHERE  H.Productid = 99
GROUP  BY H.Item,
          C.ItemId,
          C.RowID 

发布执行计划。这将不是直接的总和或情况。也许您的正确索引可以改进。也许temp1没有索引,临时表经常被忽略。与其期望我们从您的查询中解析和理解您的意图,不如用文字描述您正在尝试做什么?另外,添加示例数据和预期结果。