Second Brain: Crafted, Curated, Connected, Compounded on 10月02日
数据库物化视图:加速查询的利器
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

物化视图是数据库中的一种对象,它存储了SQL查询的结果,也称为“查询重写”。它可以是远程数据的本地副本、表的子集、连接结果或聚合函数的摘要。执行物化视图时,SQL查询会被持久化存储,从而实现快速的查询响应。物化视图的概念与数据市场、大表或执行的dbt模型相似。Oracle数据库早在1998年的8i版本就引入了物化视图,之后Postgres和SQLServer也相继支持。2020年,Google BigQuery也增加了物化视图功能。文章详细介绍了如何创建和刷新物化视图,包括创建语法和使用DBMS_REFRESH包进行定时刷新。

💡 **物化视图的核心功能**:物化视图是一种数据库对象,它预先计算并存储SQL查询的结果,从而显著提高查询性能。它能够缓存复杂查询、连接或聚合操作的结果,实现快速响应,尤其适用于需要频繁访问的数据集。

🚀 **技术发展与应用广泛**:物化视图技术并非新生事物,Oracle数据库早在1998年(8i版本)就已引入,随后Postgres和SQLServer也加入了对该功能的支持。近年来,Google BigQuery也于2020年宣布了物化视图能力,表明其在现代数据处理架构中的重要性日益凸显,被广泛应用于数据仓库和商业智能领域。

🛠️ **创建与管理详解**:文章提供了Oracle数据库中创建物化视图的标准语法,包括指定构建时机(IMMEDIATE/DEFERRED)、刷新方式(FAST/COMPLETE/FORCE)和刷新时机(COMMIT/DEMAND),以及是否启用查询重写。还介绍了使用`ON PREBUILT TABLE`选项进行预先创建表的情况。

🔄 **刷新机制的重要性**:物化视图的有效性依赖于其数据的及时更新。文章阐述了“ON COMMIT”和“ON DEMAND”两种刷新策略,并重点介绍了如何使用`DBMS_REFRESH`包来创建刷新组,实现对物化视图的定时(如每分钟)手动或自动刷新,以确保数据的一致性。对于“ON COMMIT”刷新,建议优先考虑“FAST”刷新以减少资源消耗。

A materialized view is a database object containing the results of a SQL query. The concept is also known as “Query rewrite”. It might be a local copy of remotely located data, a subset of a table’s rows and/or columns, a join result, or a summary created using an aggregate function.

When a materialized view is executed, the SQL query is persisted in storage, enabling a fast query response.

Materialized Views (MVs) can be likened to Data Marts, One Big Table, or executed dbt models (dbt).

# History

So you see, the terms are coming back. The Oracle Database first implemented ==materialized== ==view==s in version 8i (1998). They were added later by Postgres and SQLServer.

In April 2020, even Google announced April 2020 ==materialized== ==view==s capabilities in BigQuery. Check Materialized Views in Google BigQuery.

# Oracle Syntax

# Creating a Materialized View

 1 2 3 4 5 6 7 8 91011121314151617
-- Standard CreationCREATE MATERIALIZED VIEW view_nameBUILD [IMMEDIATE | DEFERRED]REFRESH [FAST | COMPLETE | FORCE]ON [COMMIT | DEMAND][[ENABLE | DISABLE] QUERY REWRITE]ASSELECT ...;-- With Pre-Built TableCREATE MATERIALIZED VIEW view_nameON PREBUILT TABLEREFRESH [FAST | COMPLETE | FORCE]ON [COMMIT | DEMAND][[ENABLE | DISABLE] QUERY REWRITE]ASSELECT ...;

# Refreshing Materialized Views

If a materialized view is set to refresh on commit, manual refreshes are typically unnecessary, except when a rebuild is required. Remember, refreshing on commit can be resource-intensive for volatile base tables. Fast refreshes are generally preferable.

For on-demand refreshes, either manual refresh or inclusion in a refresh group is possible.

The code below demonstrates creating a refresh group scheduled to refresh every minute, and adding a materialized view to it.

 1 2 3 4 5 6 7 8 910111213141516171819202122232425
BEGIN   DBMS_REFRESH.make(     name                 => 'SCOTT.MINUTE_REFRESH',     list                 => '',     next_date            => SYSDATE,     interval             => '/*1:Mins*/ SYSDATE + 1/(60*24)',     implicit_destroy     => FALSE,     lax                  => FALSE,     job                  => 0,     rollback_seg         => NULL,     push_deferred_rpc    => TRUE,     refresh_after_errors => TRUE,     purge_option         => NULL,     parallelism          => NULL,     heap_size            => NULL);END;/BEGIN   DBMS_REFRESH.add(     name => 'SCOTT.MINUTE_REFRESH',     list => 'SCOTT.EMP_MV',     lax  => TRUE);END;/

Source


Origin: The first technique I used in the Oracle database in 2008.
References: One Big Table (OBT) or Snapshotting or Materialized Views
Created 2023-12-06

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

物化视图 Materialized View 数据库 Database SQL 性能优化 Performance Optimization Oracle Postgres SQLServer BigQuery 查询重写 Query Rewrite 数据仓库 Data Warehouse
相关文章