撰写视图时 - 我应该坚持使用基表,还是我相信在视图中包含视图不会影响性能。我想要包含视图,因为如果我对表设计进行了更改而不是更新依赖于更改的表的每个视图,那么它将允许我更改一个基本视图。这似乎是更聪明的事情,但是要确保我没有做一些被认为是不好的做法或者伤害表现。
答案 0 :(得分:3)
在SQL Server视图中,在编译时得到解析。编译期间对性能的影响非常小。对实际的查询执行没有影响。然而,这假设将选择相同的计划。如果嵌套包含复杂联接的视图,则可能会遇到一种情况,即您需要更频繁地访问表。优化器无法解决这个问题,系统最终会完成比必要工作更多的工作。因此,请谨慎地将视图放入查询中,该查询不包含比通过在没有视图的情况下编写查询而访问的表更多的表。
答案 1 :(得分:1)
从历史上看,某些平台已经“麻烦”地优化了包含多个级别视图的查询。我说“麻烦”,因为大多数当时即使是优化不佳的查询也足够快。 (几乎所有的时间。但我尽量不住在最前沿。)
几年前,我决定在有意义的时候使用观点。周到地使用视图可以大大简化复杂的数据库;我们所有都知道。但我决定相信优化器能够完成足够好的工作,并相信开发人员可以在我的查询埋没服务器之前发布使优化器更好的升级。
因此,如果我认为某个视图会减少 me 的心理负担,那么我就创建了一个视图。如果我需要查询视图的视图,我就是这么做的。
到目前为止,这个决定对我来说是一个很好的决定。我从来没有用查询杀死过服务器,我仍然理解我的表和视图。 (不过,在将查询移至生产之前,我仍然会查看执行计划和测试性能。)