Sql Server 2008嵌套视图

时间:2011-05-06 16:01:59

标签: sql sql-server sql-server-2008 view

是否有关于是否使用嵌套视图的一般最佳做法?使用嵌套视图时是否有性能损失?是否有一种最佳实践表明,在你深入4层或更深层之前,确实没有性能损失?

我之所以这么说是因为我在努力决定是否使用它们。获取报告请求并不罕见,我可以访问该信息的唯一方法是将20个或更多表连接在一起。不从所有表返回字段,但需要选择正确的数据。在这种情况下,我喜欢嵌套视图并重用其他报表的低级视图,因为如果需要更改逻辑,我只需更新一个视图,所有报表都会更新。我使用的许多表都包含数百万条记录。

然而,也许这不是一个好习惯。你介意分享你的想法吗?

2 个答案:

答案 0 :(得分:12)

我会不惜一切代价避免这种情况。首先,一旦您嵌套视图,它们就无法编入索引。接下来,因为他们必须完全实现底层视图才能到达下一层。因此,您可以实现数百万条记录,以获得5条记录的最终结果。我们几乎失去了一个价值数百万美元的客户端,因为当我们的开发人员在一个数据库(而不是我输入到设计中的数据库)中执行此操作时,性能非常糟糕。

最后,我发现当你需要做出改变时,这些层次很难维护。跟踪12层视图以找到您需要修复的视图并不是一件好事。我们还遇到了一个问题,因为开发人员发现添加另一个层比修复底层层更容易,然后尝试在一个查询中访问太多表,并且这些表中的太多表是被访问的相同的数百万个记录表在不同层次的视图中有7或8次。

在我管理的数据库中,我不允许在视图中允许多个图层,如果您这样做,我会生气。

答案 1 :(得分:5)

需要考虑的其他选择: 索引视图 - 如果使用不当可能会很危险,但性能提升可能会非常惊人。

分析 - 例如分组集

程序&临时表 - 通过过程获取所需的数据,将其写入临时表,从临时表中选择。

总的来说,我不喜欢视图或嵌套视图视图的性能影响。

通常,您可以使用表之间的正确连接生成一个视图,其中包含您之后的所有信息,并使用条件过滤掉数据。