sql*_*ana 3 performance sql-server optimization execution-plan sql-server-2017 query-performance
我在这里发生了哈希匹配溢出。我已经用 FULLSCAN 更新了涉及的表的统计信息,所以不是这样。任何指针都非常感谢。
https://www.brentozar.com/pastetheplan/?id=Bkq1VjySm
我使用的是 SQL 2017 Enterprise,内存为 64GB。
鉴于数据的大小,可能无法完全避免溢出,但您可以做一些事情来改进查询。
RN) 会导致相当多的排序和溢出——考虑不同的索引来解决这个问题可能是值得的。请注意,您在此处使用的表达式DATEDIFF(day,s.COMPLETEDDATE,att.atd_date, 也用于......您为actual_day_difference( AND a.actual_day_difference BETWEEN -60 AND 90)获得的非 SARGable 谓词,它消除了从 ~5mm 到 ~400k 的行。相当大的减少可能有助于早期查询。
问题是DATEDIFF(day,s.COMPLETEDDATE,att.atd_date)必须生成整个结果集,然后过滤掉。像在 CTE、派生表或未索引的视图中那样粘贴计算不会持久化它们。在此处查看我的问答:两个日期列的 SARGable WHERE 子句。
我不确定attendand之间是否存在关系Study,但使用临时表或索引视图来具体化表达式以使其成为 SARGable 可能是值得的。您还可以探索向保存相应日期数据的任一表添加和填充附加列。
这也将开拓更多的索引选项给你,并兑现的能力ABS在DATEDIFF必要时也是如此。
由于这是针对 SQL Server 2014 的,因此可能值得探索非聚集列存储索引,这可能会减少尝试找出合适的行存储索引的痛苦,并且更适合像这样的更大的 DW 样式查询。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |