zoukankan      html  css  js  c++  java
  • MySQL之高级特性---视图

    视图:
      视图本身是一个虚拟表,不存放任何数据。
      在使用sql语句访问视图的时候,它返回的数据是Mysql从其他表生成的。
      视图和表在同一个命名空间,MySQL在很多地方低于视图和表是同样对待的。
      不过视图和表也有不同,例如,不能对视图创建触发器,也不呢过使用drop table 命令删除视图


    实现算法有两种:
      merge: 合并算法,尽可能使用这个

      Temptable:临时表算法。如果视图中高寒GROUP BU, DISTINCT, 任何聚合函数, UNION, 子查询等
      只要无法在原表记录和视图记录建立一一映射的场景中,mysql都将用临时表算法实现视图。

      explain select * from <view_name>
      id select_type
      1 primary
      2 derived
      说明该表是由临时表算法实现的。


    可更新视图:
      指可以通过更新这个视图来更新视图涉及的相关表。
      如果视图定义中包含了group by,union 聚合函数,以及其他一些特殊情况,就不能更新。
      更新视图的查询也可以是一个关语句,但是有一个限制,被更新的列必须来自同一个表中。
      另外,所有使用临时表算法实现的视图都无法被更新。

    可以使用视图实现基于列的权限控制,却不需要真正的在系统中创建列权限,因为没有额外的开销。

    使用临时表算法实现的视图,在某些时候性能会很糟糕。
    mysql以递归的方式执行这类视图,先会执行外层查询,即使外层查询优化器将其优化得很好,但是mysql
    优化可能无法像其他的数据库那样做更多的内外结合的优化。
    外层查询的where条件无法下推到构建视图的临时表的查询中,临时表也无法建立索引。

    mysql视图的限制:
      mysql不支持物化视图(物化视图是指将视图结果数据存放在一个可以查看的表中,并定期从原始表中刷新数据到这个表)
      mysql视图不会保存视图定义的原始sql语句。show create view 会以一种不友好的内部格式呈现。

  • 相关阅读:
    时间好快,转眼又一周
    八月第二周
    八月第一周
    经济学人:埃航失事:波音信誉遭到危机(2)
    1109. 航班预订统计 --前缀和 和差分
    99. 激光炸弹 --前缀和+暴力 + 动态规划
    1108. Defanging an IP Address
    【mybatis】学习笔记 3动态语句 foreach generator使用【 小心生成系统中的数据库 如uesr表 country表】
    【mybatis】学习笔记 2 动态代理 输入输出参数 关联查询
    【JSP学习笔记】1jsp入门
  • 原文地址:https://www.cnblogs.com/w2154/p/4710103.html
Copyright © 2011-2022 走看看