首页 > 解决方案 > 优化大数据运行缓慢的sql查询

问题描述

我正在使用 microsoft sql server 2012。创建了一个查询来获取详细信息,但它在处理大数据时运行缓慢。这是查询:

SELECT p.BackgroundID,
       sum(od.OrderQuantity) AS number
FROM approval.orderdetail od(nolock)
JOIN project p(nolock) ON od.ProjectID = p.projectid
AND p.BackgroundID IS NOT NULL
WHERE CAST(p.ModifiedDateUTC AS DATE) BETWEEN @startDate AND @endDate
  AND EXISTS
    (SELECT backgroundid
     FROM background b
     WHERE b.BackgroundID = p.BackgroundID
       AND (@isActive = 2
            OR b.IsActive = @isActive)
       AND (@filtertype = 0
            OR ((@filtertype IN (3, 5, 7, 8)
                 AND b.licenseid IS NULL
                 AND b.IsAR = 0)
                OR (@filtertype IN (1, 4, 5)
                    AND b.IsAR = 1)
                OR (@filtertype IN (2, 4, 6)
                    AND b.IsLicensed = 1))))
GROUP BY p.BackgroundID

谁能帮我优化查询?任何优化性能的建议。

目前,当我第一次使用大数据运行此查询时,它需要将近 1 分钟,然后当我再次运行时,它只需要 3 秒。

这是执行计划: 执行计划

标签: sqlsql-serversql-server-2012

解决方案


它在您第二次执行时运行得更快,因为引擎可以重用您第一次运行时为该查询创建的计划。所以现在它应该保持这种状态。如果您仍然不满意,请在您的问题中包含执行计划。我建议CAST从 ModifiedDateUTC 中删除 - 结果应该是相同的,但它会阻止在该字段上使用索引(如果存在)。


推荐阅读