甲骨文和PostgreSQL都提供了物化视图,但甲骨文的功能显然比PostgreSQL要强大不少,特别是查询重写查询重写功能。
<强>甲骨文强>
创建数据表和物化视图日志,插入数据
<前>
<代码> TEST-orcl@DESKTOP-V430TU3> drop table t_materializedview;
表了。
TEST-orcl@DESKTOP-V430TU3>创建表t_materializedview (int id主键,c1 varchar2 (20);
创建表。
t_materializedview TEST-orcl@DESKTOP-V430TU3>创建物化视图日志;
创建物化视图日志。
TEST-orcl@DESKTOP-V430TU3>删除表t_materializedview;
表了。
TEST-orcl@DESKTOP-V430TU3>创建表t_materializedview (int id主键,c1 varchar2 (20);
创建表。
TEST-orcl@DESKTOP-V430TU3>
TEST-orcl@DESKTOP-V430TU3>插入t_materializedview (id、c1)选择rownum '测试' | | rownum dba_objects;
128068行。
TEST-orcl@DESKTOP-V430TU3>插入t_materializedview (id、c1)选择rownum + 1000000,“测试”| | rownum dba_objects;
128068行。
TEST-orcl@DESKTOP-V430TU3>提交;
提交完成。
TEST-orcl@DESKTOP-V430TU3>
t_materializedview TEST-orcl@DESKTOP-V430TU3>创建物化视图日志;
创建物化视图日志。
代码>
创建物化视图
<前> <代码> TEST-orcl@DESKTOP-V430TU3>物化视图vw_t_materializedview下降; 物化视图删除。 vw_t_materializedview TEST-orcl@DESKTOP-V430TU3>创建物化视图 2快速刷新的需求开始与sysdate主键启用查询重写 3在select * from t_materializedview c1像“测试%”; 创建物化视图。 代码>查询基表
<前> <代码> TEST-orcl@DESKTOP-V430TU3> TEST-orcl@DESKTOP-V430TU3> select *从t_materializedview c1的测试%和id & lt;10; ID C1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 test1 2 test2 3 test3 4 test4 5 test5 6 test6 7 test7 8 test8 9 test9 9行选择。 autotrace traceon TEST-orcl@DESKTOP-V430TU3>集 TEST-orcl@DESKTOP-V430TU3> select *从t_materializedview c1的测试%和id & lt;10; 9行选择。 执行计划 ---------------------------------------------------------- 计划散列值:1344903509 -------------------------------------------------------------------------------- -------------------------------- | | | |操作Id名称|行 字节成本(% CPU) | | | -------------------------------------------------------------------------------- -------------------------------- SELECT语句| 0 | | | | 225 | 3 (0)| 00:00:01 | | 1 | MAT_VIEW重写通过索引访问ROWID | VW_T_MATERIALIZEDVIEW | 9 | 225 | 3 (0)| 00:00:01 | | * 2 | |索引范围扫描SYS_C0055952 | 9 | | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- -------------------------------- 谓词信息(由操作id): --------------------------------------------------- 2 -访问(“VW_T_MATERIALIZEDVIEW”。“ID”& lt; 10) 请注意 ----- ——“PLAN_TABLE”是旧版本 这句话所用的动态取样(级别=2) 统计数据 ---------------------------------------------------------- 0递归调用 0数据库块收到 5一致就 0物理读 0重做的尺寸 通过SQL *网客户端发送756字节 通过SQL * 500字节收到从客户端 2 SQL *净循环/从客户端 0类(内存) 0类(磁盘) 9行处理 TEST-orcl@DESKTOP-V430TU3> 代码>从执行计划可以看的到,查询语句被自动重写为查询物化视图。
<强> PostgreSQL 强>
创建数据表,插入数据
<前>
<代码>(本地):5432 pg12@testdb=# drop table t_materializedview;
错误:表“t_materializedview”并不存在
时间:31.285毫秒
(本地):5432 pg12@testdb=#创建表t_materializedview (int id主键,c1 varchar (20));
创建表
时间:194.505毫秒
(本地):5432 pg12@testdb=#
(本地):5432 pg12@testdb=#插入t_materializedview (id、c1)选择x '测试' | | x generate_series x (100000);
插入0 100000
时间:600.401毫秒
(本地):5432 pg12@testdb=#插入t_materializedview (id、c1)选择x '测试' | | x generate_series (100001、200000) x;
插入0 100000
时间:520.054毫秒
(本地):5432 pg12@testdb=#
代码>
创建物化视图
<前> <代码>(本地):5432 pg12@testdb=#物化视图vw_t_materializedview下降; 错误:物化视图“vw_t_materializedview”并不存在 时间:1.114毫秒 (本地):5432 pg12@testdb=# vw_t_materializedview创建物化视图 从t_materializedview pg12@testdb——# select * c1像“测试%”; 选择100000 时间:302.380毫秒 (本地):5432 pg12@testdb=#