【问题标题】:Stored procedure or view based report is faster存储过程或基于视图的报告更快
【发布时间】:2011-07-31 11:18:42
【问题描述】:

我想制作一个 rdlc 报告,该报告使用基于 inputdate 标准的连接从 3-4 个表中获取结果。我想知道哪个更好作为后端、视图或存储过程,以更快地获得结果并获得性能增益,因为我期望结果为 10000-30000 条记录。我的数据库是 SQL Server 2008。请帮忙!

谢谢

【问题讨论】:

标签: sql-server-2008


【解决方案1】:

如果没有更多细节,则差别很小或没有差别。

如果查询可以表示为一个简单的视图,那么你应该这样做。

更可能影响查询速度的是您拥有的索引。

【讨论】:

  • 您好,感谢您的回复。如果我使用视图,那么我的过滤标准将在报告级别指定。这意味着我收集整个数据并根据过滤器删除其余数据。我在想如果我使用存储过程,那么我只会将过滤后的结果集拉到报告中,这样就不会发生丢弃。如果我的理解有误,请纠正我。
  • 只有符合条件的数据才会“通过网络”发送
  • 我怀疑如果我使用视图,那么我的过滤标准将在报告级别指定。这意味着我收集整个数据并根据过滤器删除其余数据。但是如果我使用存储过程,我会直接获取过滤后的结果。所以在那种情况下SP会更快。对吗?
【解决方案2】:

我不确定为什么人们认为他们的选择是视图或存储过程。

视图有多种用途。如果您对不同的报告使用相同的基本查询,或者想要简化架构、实现某种类型的安全性等,那么视图可能是有意义的。 视图是出于性能原因而实现的(让我们暂时不考虑索引视图)。标准视图永远不会加快查询速度,它只是让引用视图更方便,而不是重复构成视图的所有连接等。

您的报表应该调用一个存储过程 - 这将查询代码模块化,并提供一个修改代码的中心位置。该存储过程是否引用视图是另一个问题。

【讨论】:

  • 感谢您的回复。我将继续使用存储过程。
【解决方案3】:

视图在查询上增加了一层抽象,并且没有预先优化。因此,如果您只运行底层查询,您将获得比使用视图更好的性能。

【讨论】:

  • 只是挑剔-我会说与视图相比,您会获得更好或相同的性能。只是在两者之间放置一个视图并不一定会使性能变差,至少不会明显。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 2012-07-17
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多