代码之家  ›  专栏  ›  技术社区  ›  jrharshath

在MySQL中使用视图的优势

  •  22
  • jrharshath  · 技术社区  · 16 年前

    我了解到视图可以用来创建自定义的“表视图”(也就是说),从多个表中聚合相关数据。

    我的问题是:观点的优点是什么?具体来说,假设我有两个表:

    event | eid, typeid, name
    eventtype | typeid, max_team_members
    

    现在我创建一个视图:

    eventdetails | event.eid, event.name, eventtype.max_team_members 
                 | where event.typeid=eventtype.typeid
    

    现在,如果我想在一个团队中为一些 event 我可以:

    • 使用视图
    • 执行联接查询(或存储过程)。

    我每种方法的优点/缺点是什么?

    另一个查询:如果表事件和事件类型中的数据得到更新,那么更新视图中的数据(考虑到它缓存结果数据)是否会产生开销?

    2 回复  |  直到 15 年前
        1
  •  18
  •   Harold L    16 年前

    视图不单独存储:查询视图时,视图将替换为该视图的定义。因此,对表中数据的更改将立即通过视图显示出来。

    除了前面指出的安全特性之外:

    如果要编写大量执行该联接的查询,则需要考虑SQL代码。就像在多个地方使用的函数中执行一些操作一样,它可以使代码更容易读/写/调试。

    它还允许您在一个地方更改将来如何执行联接。也许一对多关系可以变成多对多关系,在联接中引入一个额外的表。或者,您可以决定取消规范化,并在每个事件记录中包含所有eventtype字段,这样您就不必每次都加入(查询执行时间的交易空间)。

    稍后您可以进一步拆分表,将其更改为三向联接,并且不必重写使用该视图的其他查询。

    您可以将新列添加到表中,并更改视图以删除新列,这样在更改表定义时,使用“select*”的一些旧查询不会中断。

        2
  •  13
  •   Ignacio Vazquez-Abrams    16 年前

    您可以将用户限制在视图而不是基础表,从而增强安全性。

    推荐文章