Materialized View(物化视图) 会把查询结果物理存储下来,从而加快查询速度(类似“缓存的表”)。不同数据库创建方式略有差异,下面按常见数据库说明。
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;
-- 完全刷新
REFRESH MATERIALIZED VIEW mv_sales_summary;
-- 并发刷新(需要唯一索引)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_sales_summary;
CREATE UNIQUE INDEX idx_mv_sales ON mv_sales_summary(product_id);
CREATE MATERIALIZED VIEW mv_sales_summary
REFRESH COMPLETE ON DEMAND
AS
SELECT product_id, SUM(amount), COUNT(*)
FROM sales
GROUP BY product_id;
ON DEMAND:手动刷新ON COMMIT:基表提交时自动刷新FAST / COMPLETE / FORCEEXEC DBMS_MVIEW.REFRESH('mv_sales_summary');
MySQL 原生不支持物化视图,常见替代方案:
示例(手动模拟):
CREATE TABLE mv_sales_summary AS
SELECT product_id, SUM(amount)
FROM sales
GROUP BY product_id;
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);
✅ 适合:
❌ 不适合:
如果你有具体数据库(PostgreSQL / Oracle / SQL Server)和业务场景,我可以给你更精准的建表 + 刷新策略。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。