sql - 优化大数据运行缓慢的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 秒。
这是执行计划: 执行计划
解决方案
它在您第二次执行时运行得更快,因为引擎可以重用您第一次运行时为该查询创建的计划。所以现在它应该保持这种状态。如果您仍然不满意,请在您的问题中包含执行计划。我建议CAST
从 ModifiedDateUTC 中删除 - 结果应该是相同的,但它会阻止在该字段上使用索引(如果存在)。
推荐阅读
- javascript - `TypeError:无法读取未定义的属性'ballDepth'
- php - PHP重定向仅适用于每隔一个页面
- csv - 在 CSV 中没有尾随逗号的情况下,gnu-parallel 不起作用
- algorithm - 算法问题:迭代多个时间序列“as of”
- xml - 有没有办法在 XPath 中指定最低的祖先?
- bash - “-bash: [git: command not found” 在 mac 上的 bash 脚本中
- html - 具有奇偶内容的 Flexbox 居中 div
- java - 持久化关联实体时违反休眠约束
- clone - 在 love2d 中克隆一个夹具
- here-api - HERE 地图:缓存地理编码结果