|
物化视图我感觉就是对你所需要的指定结果的统计信息的纪录,我猜想它的实现机制类似trigger(把统计信息存到另张表中.)
比如我创建了一张表
create table my_all_objects as select * from all_objects
然后创建一个物化视图
create materialize view my_all_objects_view
build immediate
refresh on commit
enable rewrite
as select object_type, count(*) from my_all_objects group by object_type;
analyze table my_all_objects_view compute statistics;
物化视图最主要的用处就是性能
现在用select object_type, count(*) from my_all_objects group by object_type;
oracle会自重写你的查询语句,最后的结果是从物化视图直接查询结果,这样速度能够提高很快.
但是我感觉这里有个问题:
我再次往my_all_objects插入一条纪录,但没有commit,
此时在用
select object_type, count(*) from my_all_objects group by object_type;
查询结果,通过toad查看执行顺序确实用到了物化视图,但是响应时间和没有用物化视图几乎差不多.
此时,我再对插入的结果进行commit,之后,结果响应时间依然和没有使用物化视图差不多.
这就有一个疑问,为什么会这样?
如果我的插入操作和commit操作连续,则反复多次查询也不会出现上面的情况.
另外,如果我直接用物化视图进行查询:
select * from my_all_objects_view 则不会出现响应时间没有任何改观的情况,是不是因为oracle的rewrite的问题?
[ 本帖最后由 killtry 于 2009-11-4 21:18 编辑 ] |
|