MySQL视图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL视图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2137字,纯文字阅读大概需要4分钟。
内容图文
![MySQL视图](/upload/InfoBanner/zyjiaocheng/475/c7bd8988b5544dbe9685eb65eee6e598.jpg)
视图本身是一个虚拟表,不存放任何数据,在使用sql语句访问视图的时候,它返回的数据是MySQL从其他表中生成的。
二、实现视图的算法
1. 临时表算法:
实现视图最简单的方法是将select语句的结果存放在临时表中,当需要访问视图的时候直接访问这个临时表就可以了。
(有明显的性能问题,优化器很难优化在临时表上的查询)
2. 合并算法:
实现视图更好的方法是重写含有视图的查询,将视图的定义SQL直接包含进查询的SQL中。
MySQL可以使用这两种方法中的任何一种来处理视图,并且会尽可能使用合并算法。可以在explain extended之后使用
show warnings来查看使用视图的查询重写后的结果。
可以在创建视图的时候指定使用哪个算法:
Create algorithm=temptable view ...(指定使用临时表算法)
如果视图中包含group by、distinct、任何聚合函数、union、子查询等,只要无法在原表记录和视图记录中建立一一
映射的场景中,MySQL都将使用临时表算法来实现视图。
三、可更新视图
可更新视图是指可以通过更新这个视图来更新视图涉及的相关表。但如果视图中使用了group by、distinct、任何聚合
函数以及其他一些情况,就不能被更新了。
1. 更新视图的查询也可以是一个关联查询,但是被更新的列必须来自同一个表。
2. 所有使用临时表算法实现的视图都无法被更新。
3. Create view ... check option:任何通过视图更新的行,都必须符合视图本身的where条件的定义。也不能更新视图
定义列以外的列,不能插入不同于where条件中的列值。
4. MySQL不支持在视图上创建任何触发器。
四、视图对性能的影响
1. 在重构schema的时候可以使用视图,使得在修改视图底层表结构的时候,应用代码还可能继续不报错的运行。
2. 可以使用视图实现基于列的权限控制,却不需要真正的在系统中创建列权限,因此没有额外的开销。
3. 可以使用伪临时视图替代子查询,提高性能。
4. 使用临时表算法实现的视图,在某些时候性能会很糟糕。即使是使用合并算法实现的视图,也并不总是有很优化的实现。
五、视图的限制
1. MySQL还不支持物化视图,不支持在视图中创建索引。但可以使用构建缓存表或汇总表的办法来模拟物化视图和索引。
2. MySQL并不会保存视图定义的原始SQL语句。无法通过执行show create view查看创建视图的SQL语句。
MySQL视图
标签:warning 临时表 场景 表结构 查询 创建 聚合函数 ext 提高
本文系统来源:http://www.cnblogs.com/wujuntian/p/6403703.html
内容总结
以上是互联网集市为您收集整理的MySQL视图全部内容,希望文章能够帮你解决MySQL视图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。