SQL视图有什么缺点?

时间:2010-10-04 11:01:05

标签: sql views

最近我接受了一次采访,我被问到了上述问题。

当我想到它时我很蠢。

采访者说:

  

所有人都说观点很多   优点,但我发现没有   缺点,为什么会这样?

修改

根据所有专家的答案,我想我可以总结一下:

  1. 删除或修改表时,视图将变为非活动状态,具体取决于表对象。
  2. 并非所有时间我们都可以执行DML语句,因为通常会对复杂查询进行查看并依赖于多个表。因此,在执行DML语句时,有更多可能违反数据库约束。
  3. 由于视图通常用于复杂的静态查询,因此并非所有时间我们都可以使用该静态查询。例如; 如果您查询视图,那么看起来您节省了时间,但如果您从查看中查找的信息很少,那么您可能会面临预先降级问题。

7 个答案:

答案 0 :(得分:4)

  1. 当表格不存在时,视图将无效。

  2. 如果是多个表,则无法使用dml。

  3. 它也是数据库对象,因此占用空间。

  4. 当删除表时,视图变为非活动状态..它取决于表对象。

  5. 从视图查询比直接从表中查询需要更多时间

答案 1 :(得分:4)

我要说的大多数事情都已经涵盖了,我会补充一点。

视图在许多情况下很有用,但过多地使用它们可能是一个错误,因为它们在查询结构方面牵扯到了你的手。通常,当您的整个查询中包含多个视图时(特别是在视图分层时),或者视图的调整目的与目标略有不同时,您会发现编写查询的方法要好得多。你只需扩展视图并改变逻辑。

答案 2 :(得分:2)

与任何工具一样,视图可能会被误用,尤其是当您不确定如何正确使用视图时。

Chris Mullins defines三个基本视图实现规则:

  • 查看使用规则
  • 防扩散规则
  • 查看同步规则

如果你没有把这些事情弄清楚,你就会遇到代码维护问题,性能问题,安全问题等等。

答案 3 :(得分:1)

我能想到的唯一缺点是,您可能会强制用户加入多个视图以便以对他们有用的方式获取数据,因为您现在主要有静态查询。

因此,如果视图是一次创建的并且预计永远不会改变,那么最终可能会有大量的视图为用户创建迷宫以进行导航,因此应该有一些更新视图的过程,在需求变化时保持它们的有用性。

答案 4 :(得分:1)

1)当表被删除时,视图将受到影响。 2)如果重命名了列名,则视图将显示异常“无效的列名”。 3)为大表创建视图时,它会占用一些内存。

答案 5 :(得分:1)

  1. 如果您编写一些复杂的视图,在查看视图中的简单数据时会花费更多时间。

  2. 影响效果。从视图查询比直接从表中查询需要更多时间。

  3. 如果视图会加入多个表,则可能无法执行任何DML 操作

  4. 表依赖 - 如果更改表,则需要 更新后的观点。

答案 6 :(得分:0)

一个视图允许DBA(数据库管理员)严格控制进出数据库的内容。

在银行业务中,视图通常用于永久跟踪对表格所做的每项更改。实际表通常包含“视图”未看到的其他列,例如:

  • 最后修改(最后一次更改时)
  • last-action(更新/删除/添加)
  • 最后一个动作者(更新行的人)

因此,在显示表格视图时,仅显示最新更新或添加任何行。但是,该表仍包含每个现有的更改和行删除。

视图的主要缺点是表(用户程序员)无法直接更改基础表的用户(例如,出于性能原因)。此外,它确实为数据库管理员创建了更多工作。您可能还会考虑服务器上额外的CPU负担 - 特别是如果许多客户端都使用它。