Bootstrap

Oracle(17)什么是物化视图(Materialized View)?

物化视图(Materialized View)是数据库中的一种对象,它存储了查询的结果,并定期刷新以保持数据的最新状态。与普通视图不同,物化视图将数据物理存储在数据库中,从而提高查询性能,特别是在涉及大量数据和复杂查询的情况下。

主要特点

  1. 持久存储:物化视图将查询结果存储在数据库中,减少了每次查询时的计算开销。
  2. 刷新机制:物化视图可以定期刷新,以保持数据的最新状态。刷新方式可以是完全刷新或增量刷新。
  3. 查询优化:物化视图可以显著提高复杂查询的性能,因为它减少了实时计算的需求。

创建和管理物化视图

以下是一些创建和管理物化视图的示例代码:

创建物化视图

创建物化视图的基本语法如下:

CREATE MATERIALIZED VIEW view_name
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE]
ON [COMMIT | DEMAND]
AS
SELECT ...;

解释:

  • BUILD IMMEDIATE:立即构建物化视图并填充数据。
  • BUILD DEFERRED:延迟构建物化视图,创建时不填充数据。
  • REFRESH FAST:增量刷新,仅应用数据的变化。
  • REFRESH COMPLETE:完全刷新,删除并重新填充所有数据。
  • REFRESH FORCE:根据可用条件选择增量刷新或完全刷新。
  • ON COMMIT:在事务提交时刷新物化视图。
  • ON DEMAND:手动刷新物化视图。
示例代码

以下是一个具体的示例,展示了如何创建和管理物化视图。

-- 创建物化视图
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FAST
ON DEMAND
AS
SELECT product_id, SUM(quantity) AS total_quantity, SUM(amount) AS total_amount
FROM sales
GROUP BY product_id;

-- 手动刷新物化视图
EXEC DBMS_MVIEW.REFRESH('sales_summary');

-- 查询物化视图
SELECT * FROM sales_summary;
配置物化视图日志

为了支持增量刷新,需要为基础表创建物化视图日志:

-- 为基础表创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE (product_id, quantity, amount)
INCLUDING NEW VALUES;

查询物化视图信息

可以通过动态性能视图查询物化视图的相关信息:

-- 查询所有物化视图
SELECT * FROM user_mviews;

-- 查询物化视图的刷新时间
SELECT mview_name, last_refresh_date FROM user_mview_refresh_times;

-- 查询物化视图日志
SELECT * FROM user_mview_logs;

示例

以下是一个完整的示例,展示了如何创建、刷新和查询物化视图:

-- 为基础表创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE (product_id, quantity, amount)
INCLUDING NEW VALUES;

-- 创建物化视图
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FAST
ON DEMAND
AS
SELECT product_id, SUM(quantity) AS total_quantity, SUM(amount) AS total_amount
FROM sales
GROUP BY product_id;

-- 手动刷新物化视图
EXEC DBMS_MVIEW.REFRESH('sales_summary');

-- 查询物化视图
SELECT * FROM sales_summary;

-- 查询所有物化视图
SELECT * FROM user_mviews;

-- 查询物化视图的刷新时间
SELECT mview_name, last_refresh_date FROM user_mview_refresh_times;

-- 查询物化视图日志
SELECT * FROM user_mview_logs;

总结

物化视图是数据库中的一种对象,它存储了查询的结果,并定期刷新以保持数据的最新状态。通过使用物化视图,可以显著提高复杂查询的性能,因为查询结果已经预先计算并存储在数据库中。理解物化视图的概念、创建和管理方法,对于优化数据库查询性能至关重要。

;