达梦数据库(DM,Dameng)中,物化视图(Materialized View)是一种持久化存储查询结果的数据库对象,可以提高查询性能,尤其是在处理复杂聚合或远程数据查询时非常有用。下面是关于创建和使用达梦物化视图的详细说明:

一、创建物化视图

语法:

CREATE MATERIALIZED VIEW 视图名
[BUILD IMMEDIATE | BUILD DEFERRED]
[REFRESH [FAST | COMPLETE | FORCE]]
[START WITH (时间)]
[NEXT (时间间隔)]
[ENABLE QUERY REWRITE]
AS
SELECT 语句;

参数解释:

  • BUILD IMMEDIATE:创建视图时立即填充数据(默认)。
  • BUILD DEFERRED:仅创建结构,不立即填充数据。
  • REFRESH
    • FAST:增量刷新(需要日志支持)。
    • COMPLETE:完全刷新(重新执行查询)。
    • FORCE:系统决定采用 FAST 或 COMPLETE。
  • START WITH / NEXT:定义刷新时间。
  • ENABLE QUERY REWRITE:允许查询改写(提高性能)。

二、使用示例

示例1:创建一个静态的物化视图

CREATE MATERIALIZED VIEW mv_emp_dept
BUILD IMMEDIATE
REFRESH COMPLETE
AS
SELECT d.dept_name, COUNT(e.emp_id) AS emp_count
FROM employee e
JOIN department d ON e.dept_id = d.dept_id
GROUP BY d.dept_name;

示例2:定时刷新

CREATE MATERIALIZED VIEW mv_sales_summary
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH SYSDATE
NEXT SYSDATE + 1
AS
SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region;

上述表示:每天刷新一次。

三、刷新物化视图

手动刷新命令:

EXECUTE IMMEDIATE 'REFRESH MATERIALIZED VIEW 视图名';

例如:

EXECUTE IMMEDIATE 'REFRESH MATERIALIZED VIEW mv_emp_dept';

四、查看物化视图相关信息

查询系统表查看所有物化视图:

SELECT * FROM DBA_MVIEWS;

查看刷新状态:

SELECT * FROM DBA_MVIEW_REFRESH_TIMES;

五、注意事项

  1. 达梦不支持所有 Oracle 中物化视图的高级功能,例如日志自动维护,需手动管理。
  2. 物化视图适合读取多、写入少的场景。
  3. 建议搭配 DBMS_SCHEDULER 或外部任务进行自动刷新。