Luc*_*cas 6 sql-server execution-plan sql-server-2016 performance-tuning
我有一个具有复杂逻辑和三个深度级别(嵌套视图)的视图。由于复杂,我无法粘贴执行计划。
由于视图的目的是向数据分析师提供一些业务分析,而他们正在开发报告时,他们会通过执行选择(前 N 个)查询来检查视图样本。
视图中的这个(前 N 个)查询执行得非常糟糕,因为优化器正在为此视图选择不同的执行计划(afaik CQScanTopSortNew)
我尝试对顶部 (N) 用例进行一些优化,例如使用哈希连接,但这会破坏非顶部 (n) 用例。
非顶级 (n) 表现良好。我想知道如何防止优化器在具有 top (n) 子句时选择不同的执行计划,而不会显着改变视图的结构或功能。
例如,如果我在视图中添加一个 select distinct ,优化器总是会选择正确的计划,但视图的功能会发生变化。
Pau*_*ite 11
我想不出一种完全透明的方式来实现您想要的视图而不禁用一般的行目标,这可能不适合您的目的。
由于视图的目的是向数据分析师提供一些业务分析,而他们正在开发报告时,他们会通过执行选择(前 N 个)查询来检查视图样本。
也许你可以说服他们使用 aTOP (x) PERCENT
来代替?这必须计算整个集合中的行数才能计算出百分比。实现完整集会产生 tempdb 成本,但如果数据大小合理,这可能是可以管理的。在任何情况下,它都会给出一个没有行目标的计划。
SELECT TOP (1) PERCENT TV.* FROM TheView AS TV;
Run Code Online (Sandbox Code Playgroud)
他们可能会发现这比选择任意排序顺序(并且保证需要物理排序)更自然。
综上所述,详细调查可能会揭示调优选项,以TOP
尽可能快地进行查询。不过,这是咨询工作,因此超出了仅根据估计计划可以解决的问题。
归档时间: |
|
查看次数: |
299 次 |
最近记录: |