【发布时间】:2014-10-02 10:13:58
【问题描述】:
我希望创建对数据的非规范化访问,主要用于报告目的(从而避免连接并提高性能)。我有两个解决方案,但我正在寻找(a)其他潜在的解决方案,以及(b)我应该考虑哪些权衡。我正在使用 SQL Server 2008 R2。
在一个解决方案中,我可以在查询上创建一个索引视图,该视图执行我关心的连接。我的理解是,这确实在幕后实现,但很棘手,可能无法保证良好的性能(并且关于视图性能的争论很激烈)。
在另一个解决方案中,我可以构建机制来创建一个表,用我关心的数据填充它,然后在事务中将它换成现有的表。
对我来说,前者似乎很冒险/很神奇;后者看起来很笨拙,容易出错,并且可能会影响查询计划之类的事情。有人可以帮忙解释一下吗?
【问题讨论】:
-
“关于观点表现的争论非常激烈” 在专家中,没有这样的争论。视图被内联到查询计划中。它们对查询性能的贡献为零。初学者经常发现性能问题,随机决定一定是因为有视图。
-
您到底想解决什么问题?为什么你认为你需要一个视图?
-
@Andrew,问题的第一行陈述了目标:“我希望创建对数据的非规范化访问,主要用于报告目的(从而避免连接并获得性能)。”他不想加入一堆表并即时进行计算,而是希望保留最终结果以提高性能。索引视图是一种持久性形式。
-
那么您是否尝试过使用连接的查询?数据库经过优化以使用连接,而非规范化实际上会降低性能。
标签: sql-server database-performance