Oracle vs PostgreSQL Develop(20) - Materialized View
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Oracle和PostgreSQL都提供了物化视图,但Oracle的功能显然比PostgreSQL要强大不少,特别是查询重写query rewrite功能。Oracle创建数据表和物化视图日志,插入数
千家信息网最后更新 2025年01月23日Oracle vs PostgreSQL Develop(20) - Materialized View
Oracle和PostgreSQL都提供了物化视图,但Oracle的功能显然比PostgreSQL要强大不少,特别是查询重写query rewrite功能。
Oracle
创建数据表和物化视图日志,插入数据
TEST-orcl@DESKTOP-V430TU3>drop table t_materializedview;Table dropped.TEST-orcl@DESKTOP-V430TU3>create table t_materializedview(id int primary key,c1 varchar2(20));Table created.TEST-orcl@DESKTOP-V430TU3>create materialized view log on t_materializedview;Materialized view log created.TEST-orcl@DESKTOP-V430TU3> drop table t_materializedview;Table dropped.TEST-orcl@DESKTOP-V430TU3>create table t_materializedview(id int primary key,c1 varchar2(20));Table created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>insert into t_materializedview(id,c1) select rownum,'test'||rownum from dba_objects;128068 rows created.TEST-orcl@DESKTOP-V430TU3>insert into t_materializedview(id,c1) select rownum+1000000,'TEST'||rownum from dba_objects;128068 rows created.TEST-orcl@DESKTOP-V430TU3>commit;Commit complete.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>create materialized view log on t_materializedview;Materialized view log created.
创建物化视图
TEST-orcl@DESKTOP-V430TU3> drop materialized view vw_t_materializedview;Materialized view dropped.TEST-orcl@DESKTOP-V430TU3>create materialized view vw_t_materializedview 2 refresh fast on demand start with sysdate with primary key enable query rewrite 3 as select * from t_materializedview where c1 like 'test%';Materialized view created.
查询基表
TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>select * from t_materializedview where c1 like 'test%' and id < 10; ID C1---------- -------------------- 1 test1 2 test2 3 test3 4 test4 5 test5 6 test6 7 test7 8 test8 9 test99 rows selected.TEST-orcl@DESKTOP-V430TU3>set autotrace traceonlyTEST-orcl@DESKTOP-V430TU3>select * from t_materializedview where c1 like 'test%' and id < 10;9 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 1344903509----------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 9 | 225 | 3 (0)| 00:00:01 || 1 | MAT_VIEW REWRITE ACCESS BY INDEX ROWID| VW_T_MATERIALIZEDVIEW | 9 | 225 | 3 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN | SYS_C0055952 | 9 | | 2 (0)| 00:00:01 |----------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("VW_T_MATERIALIZEDVIEW"."ID"<10)Note----- - 'PLAN_TABLE' is old version - dynamic sampling used for this statement (level=2)Statistics---------------------------------------------------------- 0 recursive calls 0 db block gets 5 consistent gets 0 physical reads 0 redo size 756 bytes sent via SQL*Net to client 500 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 9 rows processedTEST-orcl@DESKTOP-V430TU3>
从执行计划可以看到,查询语句被自动重写为查询物化视图。
PostgreSQL
创建数据表,插入数据
[local]:5432 pg12@testdb=# drop table t_materializedview;ERROR: table "t_materializedview" does not existTime: 31.285 ms[local]:5432 pg12@testdb=# create table t_materializedview(id int primary key,c1 varchar(20));CREATE TABLETime: 194.505 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=# insert into t_materializedview(id,c1) select x,'test'||x from generate_series(1,100000) as x;INSERT 0 100000Time: 600.401 ms[local]:5432 pg12@testdb=# insert into t_materializedview(id,c1) select x,'TEST'||x from generate_series(100001,200000) as x;INSERT 0 100000Time: 520.054 ms[local]:5432 pg12@testdb=#
创建物化视图
[local]:5432 pg12@testdb=# drop materialized view vw_t_materializedview;ERROR: materialized view "vw_t_materializedview" does not existTime: 1.114 ms[local]:5432 pg12@testdb=# create materialized view vw_t_materializedview pg12@testdb-# as select * from t_materializedview where c1 like 'test%'; SELECT 100000Time: 302.380 ms[local]:5432 pg12@testdb=#
查询数据
[local]:5432 pg12@testdb=# select * from vw_t_materializedview limit 10; id | c1 ----+-------- 1 | test1 2 | test2 3 | test3 4 | test4 5 | test5 6 | test6 7 | test7 8 | test8 9 | test9 10 | test10(10 rows)Time: 3.517 ms[local]:5432 pg12@testdb=# refresh materialized view vw_t_materializedview;REFRESH MATERIALIZED VIEWTime: 251.243 ms[local]:5432 pg12@testdb=# select * from vw_t_materializedview limit 10; id | c1 ----+-------- 1 | test1 2 | test2 3 | test3 4 | test4 5 | test5 6 | test6 7 | test7 8 | test8 9 | test9 10 | test10(10 rows)Time: 1.709 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=# explain verbose select * from t_materializedview where c1 like 'test%' and id < 10; QUERY PLAN ---------------------------------------------------------------------------------------------------------- Index Scan using t_materializedview_pkey on public.t_materializedview (cost=0.42..8.60 rows=4 width=14) Output: id, c1 Index Cond: (t_materializedview.id < 10) Filter: ((t_materializedview.c1)::text ~~ 'test%'::text)(4 rows)Time: 2.732 ms[local]:5432 pg12@testdb=#
PostgreSQL尚未实现基于物化视图的自动重写
参考资料
N/A
视图
数据
查询
功能
数据表
强大
参考资料
尚未
日志
语句
资料
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库检查包含
服务器最高多少度
医院机房服务器升级报告
一般软件开发编码阶段
dz数据库怎么改用户名
谷歌的数据库有多大
小联网络技术有限公司怎么样
测量软件开发技术
传真服务器cma检测报告
市南区安卓软件开发解决方案
vba连接两个不同数据库
海康多媒体智能服务器
战术小队服务器op指令
百东网络技术有限公司电话
乾唐互联网科技
怎样将数据库数据引入账套
南阳市委网络安全工作会议
我的世界十人服务器价格
杭州直播软件开发方案
方舟服务器存档能换号使用吗
新加坡服务器怎么弄快
杨浦区网络技术转让价钱
数据库没有有效分析步数据
战地1服务器中断
对等网络安全插画
数据库分组加分片架构原理
集成开发和软件开发
古的服务器
电脑拨号设置服务器ip
潜江定制软件开发公司