5

我对物化视图感到困惑。要么是我使用的 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 版本:9.6.1.1 Oracle:10g

4

1 回答 1

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
于 2011-05-19T19:42:02.777 回答