SQL Server 2005 嵌套视图 - 解除纠缠的策略? [关闭]

Posted

技术标签:

【中文标题】SQL Server 2005 嵌套视图 - 解除纠缠的策略? [关闭]【英文标题】:SQL Server 2005 nested views - strategy for unentaglement? [closed] 【发布时间】:2013-01-14 13:55:50 【问题描述】:

我有一个报告 Web 应用程序,它根据在一系列嵌套 sql 视图(3 级深度)中完成的聚合来绘制信息图。最后一个嵌套视图是从实体框架代码中的存储过程调用的。由于它难以获取数据并超时,因此性能损失已经开始产生影响:

在 Sql profiler 中有 360,000+ 读取和 CPU @ 28313。此外,我什至无法在 SQL 中打开第三级视图而不会超时。

第一个视图只是从几个表和聚合中收集数据。第二个对这些数据执行计算,例如日期差异、时区调整和平均值。第三个完成这些计算并提供所需数据的摘要。第三种视图是我从中查询的视图。

一般来说,解开嵌套视图的好策略是什么?具体来说,如果您有需要在 SQL Server 中完成的计算,但只能在将数据组合到某个级别后才能完成,那么有什么比嵌套视图更好的策略?

感谢您提供的任何帮助!

【问题讨论】:

您的问题中的具体信息很少,因此很难回答。您是否进行了任何分析以查看查询中最大的瓶颈在哪里? 视图是否必须显示实时数据?一种方法是在每晚计算后将数据暂存到您的报告从中提取的表格中。 是的,我一直在纠结是否要在这里问这个问题,但我还是想试试。我已经尝试过分析,它肯定指向调用最终视图的存储过程(大量读取,cpu)......但没有太多需要改变的地方。 如果您满足某些条件,则第一个视图可能会变成indexed view。这将维护聚合数据的副本(并且 SQL Server 负责根据原始表对其进行维护),这可能是大部分成本所在。 @kdy,谢谢。该视图应始终具有最新数据,因此也许这是一种选择。我不能 100% 确定如何设置,我可以研究一下 【参考方案1】:

您可以将任何视图作为子查询包含在内,但是,我怀疑它本身是否有助于在这种情况下提高性能。它将使您能够查看部分视图,并可能将任何共享部分放入表变量或临时表中。

如果您能分享更多信息,那可能会有所帮助。

我建议你:

    内嵌这些视图,让您一目了然 一点一点地削减它,看看(未编译的!!)性能问题在哪里。 修复性能问题 希望编译后性能问题在同一个地方。

【讨论】:

谢谢@penguat。我预计可能需要一种通用的缩减方法,并且我对使用临时表选项感兴趣。我不确定提供哪些其他信息会更好,请告诉我有什么帮助? 示例代码通常会有所帮助 - 视图中的函数之类的内容可能会使您的速度慢很多,但除非您提及,否则不会被发现,或者将代码粘贴到您的问题中。 另外,你看过估计的/实际的执行计划了吗?

以上是关于SQL Server 2005 嵌套视图 - 解除纠缠的策略? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005 中的系统视图文本

SQL Server 2005 视图

SQL Server 2005 视图与物化视图与存储过程

如何使用 SQL Server 2005 创建基于 SQL 语句集的视图?

Sql Query 列出 SQL Server 2005 数据库中的所有视图

Sql Server 2005 COUNT 视图耗时太长