温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Materialized View物化视图如何创建

发布时间:2026-11-03 00:34:12 来源:亿速云 阅读:97 作者:小樊 栏目:数据库

Materialized View(物化视图) 会把查询结果物理存储下来,从而加快查询速度(类似“缓存的表”)。不同数据库创建方式略有差异,下面按常见数据库说明。


一、PostgreSQL(最典型)

1️⃣ 创建物化视图

CREATE MATERIALIZED VIEW mv_sales_summary AS
SELECT
    product_id,
    SUM(amount) AS total_amount,
    COUNT(*) AS order_count
FROM sales
GROUP BY product_id;

2️⃣ 刷新物化视图

-- 完全刷新
REFRESH MATERIALIZED VIEW mv_sales_summary;

-- 并发刷新(需要唯一索引)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_sales_summary;

3️⃣ 创建唯一索引(支持并发刷新)

CREATE UNIQUE INDEX idx_mv_sales ON mv_sales_summary(product_id);

二、Oracle

1️⃣ 创建物化视图

CREATE MATERIALIZED VIEW mv_sales_summary
REFRESH COMPLETE ON DEMAND
AS
SELECT product_id, SUM(amount), COUNT(*)
FROM sales
GROUP BY product_id;

2️⃣ 刷新方式

  • ON DEMAND:手动刷新
  • ON COMMIT:基表提交时自动刷新
  • FAST / COMPLETE / FORCE
EXEC DBMS_MVIEW.REFRESH('mv_sales_summary');

三、MySQL(8.0 之前不支持)

MySQL 原生不支持物化视图,常见替代方案:

  • 使用 普通表 + 定时任务(Event / Cron)
  • 使用 视图(逻辑视图,不加速)

示例(手动模拟):

CREATE TABLE mv_sales_summary AS
SELECT product_id, SUM(amount)
FROM sales
GROUP BY product_id;

四、SQL Server

SQL Server 中叫 Indexed View(索引视图)

CREATE VIEW v_sales_summary
WITH SCHEMABINDING
AS
SELECT product_id, SUM(amount) AS total
FROM dbo.sales
GROUP BY product_id;
GO

CREATE UNIQUE CLUSTERED INDEX idx_v_sales
ON v_sales_summary(product_id);

五、使用建议

✅ 适合:

  • 聚合查询
  • 报表 / BI
  • 读多写少

❌ 不适合:

  • 实时性要求极高
  • 数据频繁变更

如果你有具体数据库(PostgreSQL / Oracle / SQL Server)和业务场景,我可以给你更精准的建表 + 刷新策略。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手