MySQL | MySQL为什么建议不要使用视图

MySQL为什么建议不要使用视图

一、什么是视图

官方定义:视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

简单点说就是:视图是一个sql的别名,也可以说是个sql的封装

二、 为什么不建议使用视图

mysql的视图不是一种物化视图,它相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查出来的。这带来的问题是使用视图并不能将常用数据分离出来,优化查询速度。

且操作视图的很多命令都与普通表一样,这会导致在业务代码中无法通过sql区分表和视图,使代码变得复杂。

实现视图的方式有两种,分别为合并算法和临时表算法,合并算法是指查询视图时将视图定义的sql合并到查询sql中,比如create view v1 as select * from user where sex=m;当我们要查询视图时,mysql会将select id,name from v1;合并成select id,name from user where sex=m……;临时表算法是先将视图查出来的数据保存到一个临时表中,查询的时候查这个临时表。不管是合并算法和临时表算法都会带来额外的开销,;且如果使用临时表后会使mysql的优化变得很困难,比如索引。

而且视图还引入了一些其他的问题,使得其背后的逻辑非常复杂。

当然,视图在某些情况下可以帮助提升性能,但视图的性能很难预测。且在mysql的优化器中,视图的代码执行路径也完全不同,无法直观的预测其执行性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一介草民丶

谢谢老板的一分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值