基于视图的关联查询优化_mysql 视图

视图就是将复杂的查询语句简单化,创建语句为:create view ... as select

视图可以基于一个表创建,也可以基于多张表创建。视图基于某数据表创建,那么该表就被称为基表(base table),视图并不存储具体数据,创建完成之后,可以将视图当作普通数据表使用,可以执行:

select ... from view _name

视图并不存储数据,其下所有的数据都在基表中,可以将视图看作某些复杂查询的快捷方式,对于视图进行数据修改,结果会直接作用到对应的基表中。

视图创建完成之后,可以通过create or replace view view_name as select语句进行修改。

视图的创建最简单的就是将select结果放到临时表中:

CREATE TEMPORERY TABLE tmp_table AS SELECT * FROM Country WHERE NAME = ‘Australia’;

上述语句,我们创建了一张临时表,返回查询该表:

SELECT NAME,Code from tmp_table WHERE CONTINENT=‘Oceaina’;

这个sql查询会有明显的性能问题,优化器很难在临时表中对上面的sql进行优化,解决方法就是重写sql,将我们创建视图的查询语句包含在sql中:

SELECT NAME,Code FROM tmp_table WHERE NAME=‘Australia’ AND CONTINENT = ‘Oceaina’;

创建视图有两种算法,上面例子就是其中一种,临时表法,还有一种就是合并法。通过EXPLAIN SELECT 可以看到视图是基于哪种算法创建的,select_type为“DERIVED”则表示视图是采用临时表算法实现的。

两种算法的具体实现如下图:

7df3c68afd3870dcf41f42c9a6859cb5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值