💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] > [官方手册](http://www.postgres.cn/docs/9.5/rules-materializedviews.html) ## 物化视图 物化视图(Materialized View)是一种在数据库中预先计算并存储结果的查询结果集。与普通的视图不同,物化视图将查询的结果存储在磁盘上,而不是在每次查询时动态计算。这样做的目的是为了提高查询性能,特别是在需要频繁访问复杂查询结果的情况下。 适合场景 1. **频繁查询相同的数据**:如果您的应用程序需要频繁查询相同的数据集,而且这些查询比较复杂或者需要耗费较长时间执行,那么使用物化视图来缓存这些查询的结果可以显著提高查询性能。 2. **离线分析和报告生成**:对于需要进行离线分析和报告生成的场景,您可以使用物化视图来预先计算并存储聚合数据,以便后续快速检索和分析,从而减少对底层数据的访问次数。 3. **减少数据库负载**:通过使用物化视图作为缓存,可以减少对底层数据库的查询负载,从而提高整体系统的性能,并且可以更好地应对高并发的情况。 4. **提高响应速度**:物化视图可以作为缓存来存储频繁查询的结果,使得响应速度更快,并且可以降低应用程序的响应时间,从而提升用户体验。 不适合场景 1. 对于那些数据更新频繁的场景 ## 示例 创建一张表 ``` CREATE TABLE invoice ( invoice_no integer PRIMARY KEY, seller_no integer, -- 销售员的 ID invoice_date date, -- 销售日期 invoice_amt numeric(13,2) -- 销售量 ); ``` 创建物化视图,绘制历史销售数据 ``` CREATE MATERIALIZED VIEW sales_summary AS SELECT seller_no, invoice_date, sum(invoice_amt)::numeric(13,2) as sales_amt FROM invoice WHERE invoice_date < CURRENT_DATE GROUP BY seller_no, invoice_date ORDER BY seller_no, invoice_date; CREATE UNIQUE INDEX sales_summary_seller ON sales_summary (seller_no, invoice_date); ``` 更新物化视图 ``` REFRESH MATERIALIZED VIEW sales_summary; ```