视图就是将复杂的查询语句简单化,创建语句为: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”则表示视图是采用临时表算法实现的。
两种算法的具体实现如下图: