物化视图实际是个不断刷新的表
举例如下:
create materialized view mv1
build immediate
refresh on commit -- 提交时立即刷新
enable query rewrite
as
select owner,count(*)
from all_objects
group by owner;
举例如下:
create materialized view mv1
build immediate
refresh on commit -- 提交时立即刷新
enable query rewrite
as
select owner,count(*)
from all_objects
group by owner;
oracle817SQL> create view vdemo as select * from t;视图已建立。已用时间: 00: 00: 00.60
SQL> desc vdemo;
名称 空? 类型
----------------------------------------- -------- ------
AAA NUMBER
BBB NUMBERSQL> create index idx_taaa on vdemo(aaa);
create index idx_taaa on vdemo(aaa)
*
ERROR 位于第 1 行:
ORA-01702: 此处不允许有视图
已用时间: 00: 00: 00.60
SQL>
最终执行视图查询时候实质还是执行你写的视图的哪个语句在加上你的查询视图的条件综合的语句。oracle依据该整个语句进行分析优化的!
物化视图实质类似与存储过程+JOB把数据定期刷新到你的物化视图中。物化视图是物理真正存储的数据,故物化视图是可以建立索引的。
要优化视图的执行速度,实质还是优化你视图中查询语句相关的表的索引或者其他关联看哪个效率最高而做优化!
加索引后 最好看一下其执行计划
通过计划 你可以看到 哪个索引起了作用 再做适当修改 要注意的就是 在给表的相关里加索引的时候必须是where条件中的列 如果你有联合索引 但在where条件中 又不包含其中的字段的时候 你在执行计划中就会发现其索引根本上没有起到作用!