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 语句集的视图?