mysql 视图

视图就是为我们的语句创建一个【名称】

例如我们查询一个表:select 字段1,字段2,字段3 from table where id=4

 

如果我们创建一个视图取名shop:create view shop as?select?字段1,字段2,字段3? from table where id<4

以后直接使用视图即可:?select * from shop? ?主要用来简化sql语句

视图对性能有影响吗?不能提升性能,在分布式和大数据方面表现并不好,反而会降低性能。

只是简化sql语句(微软sqlserver会好一些)。

还有一个安全的优势,因为别人看不到具体sql语句内容。

还有就是比如你的table表有变化,你的查询也发生了改变,但是你的php程序不需要调整,只更改视图的语句即可。

视图会用到索引吗?视图在分布式和大数据方面表现并不好,反而会降低性能。

视图适合怎样的场景呢?

使用项目:OA和ERP中使用。电商项目不建议使用

使用视图方式如何给user表添加数据

//INSERT INTO 视图名称(字段名字) VALUES(‘内容’);

INSERT INTO user_view(name) VALUES(‘shitu’);

 

 

INSERT INTO user_view(name,num) VALUES(‘shitu2′,5);

但是我们明明写了where num < 4 ; 为啥还能添加

我需要在创建视图with check option;

我们再去执行insert,你就会发现不能添加了

 

 

什么时候,不能新增和修改呢?

  • 有聚合函数
  • 包含子查询
  • join

 

 

物化视图(临时表,真正的表),在mysql其实不存在,但是在其他两大数据库存在orcale sqlserver

主要应用场景:聚合查询、

如果我们数据量有几千万,select? count(*) from table_name;? ?执行15秒

可以使用查询缓存优化,但是命中sql,更新不是这么快

就需要用到

辅助索引:建筑字段索引

物化视图:触发器、存储过程、变量

 

创建一个实体表,物化视图表(真实的表)只是保存表的数量

记录:查询的结果

然后直接查询物化视图表? ====》获取聚合结果集合

 

但是不能实时怎么办

就需要用到触发器,修改物化视图表

 

 

发表评论