我对物化视图感到困惑。要么是我使用的Toad IDE让我感到困惑,要么就是我对MV的了解不够。
我在Oracle中通过类似的东西创建了一个物化视图....
CREATE MATERIALIZED VIEW TESTRESULT
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS
SELECT ...
FROM tables...
我希望可以使用查询返回的数据创建和填充实体化视图。好的,没什么大不了的。
我感到困惑的是为什么我的Toad IDE在表格部分下显示了一个表'TESTRESULT'。它甚至还有一个我可以看到的“创建表脚本”。
但我也在“物化视图”部分下看到了物化视图。
幕后是Oracle在创建物化视图时创建表格吗?它看起来好像有两个单独的对象,一个物化视图和一个表?有人可以在创建物化视图时解释幕后发生的事情吗? Toad错了还是我误解了什么?
Toad版本:9.6.1.1 甲骨文:10克
答案 0 :(得分:9)
是的,在幕后,Oracle创建了两个对象,一个实际实现结果的表和一个包含所有元数据(查询,属性等)的物化视图。它与创建唯一约束时发生的情况非常相似 - Oracle创建一个与约束同名的唯一索引来实际执行约束,然后它自己创建一个约束。如果在预构建的表上创建实例化视图,则最终可能会为表和物化视图创建不同的名称,就像创建使用具有不同名称的现有索引的约束一样。
SQL> select object_name, object_type
2 from user_objects
3
SQL> ed
Wrote file afiedt.buf
1 select object_name, object_type
2 from user_objects
3* where object_name = 'MV_EMP'
4 /
no rows selected
SQL> create materialized view mv_emp
2 as
3 select *
4 from emp;
Materialized view created.
SQL> column object_name format a30;
SQL> select object_name, object_type
2 from user_objects
3 where object_name = 'MV_EMP';
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
MV_EMP TABLE
MV_EMP MATERIALIZED VIEW