不是很大的看法(不记得上次我写了一个),但也不完全禁止它们。如果您的数据库允许您在视图上放置索引,而不仅仅放在桌面上,那么通常可以提高性能,使其更好。如果您正在使用视图,请务必查看它们的索引。
我真的只看到了需要为视图数据分区和极其复杂的连接是给应用程序(这里的财务报告,其中从一切相同的数据集开始可能是批判性思维)真正的关键。我知道一些报表工具似乎更喜欢存储过程的视图。
我是一个很大的支持者,不会在特定实例中返回比您需要的更多记录或字段,并且过度使用视图往往会使人们返回比他们需要的更多字段(并且太多情况下,太多联接)这浪费了系统资源。
我还倾向于看到依赖视图的人(不是视图的开发人员 - 只使用视图的人)往往不能很好地理解数据库(所以如果不使用它们会导致连接错误视图),对我来说,编写针对数据库的良好代码至关重要。我希望人们了解他们要求分贝做什么,而不是依赖视图的一些魔术黑盒子。当然这都是个人意见,你的里程可能会有所不同。
布拉姆一样,我个人还没有发现它们更容易维护比存储的特效。
编辑于2010年10月添加: 由于我原本写这个,我有机会与由沉迷于使用视图的人设计的几个数据库一起工作。更糟糕的是,他们使用调用视图的视图(最终达到可以调用的表的数量限制)的视图。这是一场表演噩梦。花费8分钟在一个视图中获取记录的简单计数(*),并花费更长的时间才能获取数据。如果您使用视图,请谨慎使用调用其他视图的视图。您将构建一个系统,在生产的正常性能负载下很可能无法正常工作。在SQL Server中,您只能索引不调用其他视图的视图,因此当您在链中使用视图时最终发生的情况是,必须为每个视图构建整个记录集,直到找到最后一个应用where子句条件。您可能需要生成数百万条记录才能看到三条记录。如果您真的只需加入一次,您可以连接6次同一张表,但在最终结果集中,您可能会返回比您需要的更多的列数。
+1,但我遇到过设计不好的情况导致可怕表现的情况。情况是SQL2K有两个视图执行工会,然后在第三个视图中加入。在这个特定情况下,性能降低了1000倍。 – BlackWasp 2009-02-23 22:18:30
遇到此问题。我们正在为有性能问题的公司提供咨询服务。我们也给他们一个基于PDA的解决方案,以配合他们现有的系统。他们对每张桌子都有一个观点。他们对系统使用的每个查询都有一个视图。而且他们希望我们能够为我们基于PDA的系统访问其数据库所用的每个查询分别提供一个视图。我告诉他们这是一个可怕的想法。我应该继续他们的做事方式吗?我可以将此作为单独的问题发布在SO上。 – 2012-04-11 12:37:17