【问题标题】:Querying a view vs tables in SSRS Dataset在 SSRS 数据集中查询视图与表
【发布时间】:2009-11-17 19:53:54
【问题描述】:
在 SSRS 中使用数据集是否有最佳实践?我应该为直接从表中提取的数据集编写查询,还是应该在源数据库中创建一个视图,然后通过数据集查询该视图?
我了解在某些情况下视图会更好(集中视图以在多个报告中使用)和在某些情况下查询表会更好(如果您无权访问在源中创建视图)数据库,或者如果您在一份报告中使用多个数据库数据源)。但是有任何性能影响吗?服务器是否仍能以与视图中的结果类似的方式缓存来自 SSRS 的数据集查询结果?
任何见解将不胜感激:-)
【问题讨论】:
标签:
sql
sql-server
reporting-services
【解决方案1】:
视情况而定。
使用视图可以使您免受数据模型更改的影响 - 表可以更改,但只要您可以像以前一样获取数据,一切都很好。视图只是一个 SQL 语句,它就像运行一个子选择。由于封装,底层查询效率低下的风险更大。使用物化视图(SQL Server 中的索引视图)是加快查询速度的一种选择,但要求非常有限。
如果您发现需要在众多报告中提供相同的信息 - 是的,请使用视图。否则直接查询表。
无论哪种方式,通过存储过程来做...
【解决方案2】:
我会提醒您不要使用引用其他视图的视图。我已经看到这些会产生性能问题。
【解决方案3】:
我通常为我的报告使用存储过程,这样任何代码都可以重复使用(并且保持一致)。此外,您还可以在 sp 中应用过滤,从而减少加载时间。
【解决方案4】:
如果性能真的很重要(并且如果 DBA 允许),请考虑为每个报告实际创建一个表而不是视图。
创建一个存储过程以在每晚刷新中更新表。您报告中的数据集将是一个简单的
select *
from rptRydmansTable
where Column1 = @Parm1 and Column2 = @Parm2
这些东西会飞!