使用SqlServer Views有什么缺点?

Lil*_*sey 24 t-sql sql-server performance views

使用SqlServer Views有什么缺点?

我经常创建视图以非规范化形式显示我的数据.

我发现查询其中一个连接更容易,因此更快,更容易出错,并且更多自我记录,而不是生成许多表之间复杂连接的复杂查询.特别是当我从不同的角度分析相同的数据(许多相同的字段,相同的表连接)时.

但创建和使用这些视图是否需要付费?

我是否放慢速度(或加速?)查询处理?

hyp*_*epy 19

来到Views时有优点和缺点.

好处:

  1. 它们是虚拟表,不作为不同的对象存储在数据库中.存储的所有内容都是SELECT语句.
  2. 它可以通过限制用户可以看到的内容来用作安全措施.
  3. 它可以通过将它们封装到视图中来使常用的复杂查询更容易阅读.这是一把双刃剑 - 见缺点#3.

缺点:

  1. 它没有缓存优化的执行计划,因此它不会像存储过程一样快.
  2. 因为它基本上只是SELECT的抽象,所以它比执行纯SELECT慢得多.
  3. 它可以隐藏复杂性并导致陷阱.(Gotcha:ORDER BY不予尊重).

我个人的意见是不使用视图,而是使用存储过程,因为它们提供了视图的安全性和封装,但也提高了性能.

  • 我认为最大的危险来自劣势#3.隐藏的复杂性具有潜在危险性.通常,使用视图的目的是"简化",但从长远来看,最终可能会产生更多问题. (4认同)
  • 你能解释一下ORDER BY not Honored Gotcha以及它是如何表现出来的.如果你想回答,我有一个问题.http://stackoverflow.com/questions/5901558/is-order-by-honoured-in-sql-server-views (3认同)

Pau*_*sik 11

使用视图的一个可能的缺点是,您抽象了底层设计的复杂性,这可能导致初级开发人员和报表创建者滥用.

对于一个特别大而复杂的项目,我设计了一组视图,这些视图主要由报表设计者用于填充水晶报表.几周后我发现初级开发人员已经开始使用这些视图来获取聚合并加入这些已经很大的视图,因为它们在那里并且易于使用.(数据库中有一个强大的EAV设计元素.)在初级开发人员开始询问为什么看似简单的报告需要花费很多时间才能执行之后,我发现了这一点.


JNK*_*JNK 7

视图的效率在很大程度上取决于底层表.视图实际上只是一种有组织的查看查询结果的一致方式.如果用于构成视图的查询是好的,并且在基础表上使用适当的索引,则视图不应对性能产生负面影响.

在SQL Server中,您还可以创建实体化或索引视图(自SQL Server 2000以来),这会在一定程度上提高速度.

  • 与往常一样,未归因和未注释的downvotes值得赞赏:P (2认同)