【问题标题】:What are the disadvantage of SQL views?SQL 视图的缺点是什么?
【发布时间】:2011-04-20 18:08:18
【问题描述】:

最近面试,被问到上面的问题。

一想到这个我就傻了。

面试官说:

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

编辑

根据各位专家的回答,我想我可以总结一下:

  1. 删除或修改表时,视图变为非活动状态,这取决于表对象。
  2. 并非所有时候我们都可以执行 DML 语句,因为通常视图是为复杂查询创建的,并且依赖于多个表。因此,在执行 DML 语句时更有可能违反数据库约束。
  3. 由于视图通常用于复杂的静态查询,并非所有时候我们都可以在相同的情况下使用该静态查询。例如; 如果您在视图中查询,那么看起来您可以节省时间,但如果您从视图中查找的信息很少,那么您可能会遇到性能退化问题。

【问题讨论】:

  • 后来我回答他,视图不过是一个复杂的查询,可以当作对象或表或源。

标签: sql views


【解决方案1】:
  1. 当表不存在时,视图将不起作用。

  2. 如果超过一张表,dml 是不可能的。

  3. 它也是数据库对象,所以会占用空间。

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

  5. 从视图查询比直接从表查询花费更多时间

【讨论】:

  • 如果不止一张桌子,你确定dml是不可能的吗?让我看看..
  • 第五点,我在这里找到了相关性:performance degradation
  • 第三点,我不同意你的观点,因为视图只是存储的语句,所以它不占用空间,除了存储语句!
【解决方案2】:

我想说的大部分内容都已经涵盖了,不过我会添加这个。

视图在许多情况下都很有用,但过多地使用它们可能是错误的,因为它们在查询结构方面束缚了您的手脚。通常,当您的整体查询在其中包含多个视图时(尤其是当视图分层时),或者当视图已针对与最初预期的目的略有不同的目的进行调整时,您会发现编写查询的方式要好得多,如果您只需扩展视图并更改逻辑即可。

【讨论】:

    【解决方案3】:

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

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

    • 视图使用规则
    • 防扩散规则
    • 视图同步规则

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        1) 当一个表被删除时,视图会受到影响。 2) 如果重命名列名,则视图将显示异常 "Invalid column name" 。 3)为大表创建视图时,会占用一些内存。

        【讨论】:

          【解决方案6】:
          1. 如果你写一些复杂的视图,同时从视图中查询简单的数据会花费更多的时间。

          2. 它会影响性能。从视图中查询比直接从表中查询需要更多时间。

          3. 如果视图将连接多个表,您可能不会执行任何 DML 操作。

          4. 表依赖-如果你改变表,你需要 也更新了视图。

          【讨论】:

          • 您是否有任何链接/文档来支持“从视图中查询比直接从表中查询需要更多时间。”?!如果是,我们所说的性能差异有多大?
          【解决方案7】:

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

          在银行业务中,视图通常用于永久跟踪对表所做的每次更改。真实表通常包含“视图”看不到的附加列,例如:

          • last-modified(最后一次更改的时间)
          • 上次操作(更新/删除/添加)
          • last-actioner(更新行的人)

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

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

          【讨论】:

          • “视图的唯一缺点是……用户……不能直接更改基础表”——如果 DBA 在VIEW 上使用INSTEAD OF 样式触发器,他们可以。
          猜你喜欢
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 2015-05-25
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          • 2011-01-09
          • 1970-01-01
          相关资源
          最近更新 更多