How Materialised Views work in PostgreSQL?

Materialized views in PostgreSQL are useful when you have frequently used queries that are complex, slow, or involve large amounts of data. In such cases, creating a materialized view can significantly improve query performance.

A materialized view is essentially a pre-computed table, which is periodically updated to ensure that the data is up to date. When you create a materialized view, the query that defines the view is executed and the results are stored in the view table. Subsequent queries against the materialized view use the pre-computed results, rather than re-computing the results each time the query is executed.

You should consider using a materialized view when:

  1. You have a query that takes a long time to execute, and you need to run it frequently.
  2. You have a query that involves a large amount of data, and you need to run it frequently.
  3. You have a complex query that is difficult to optimize, and you need to run it frequently.

By creating a materialized view for such queries, you can significantly improve the performance of your database. However, it is important to note that materialized views can also have a negative impact on performance if they are not used correctly. You should carefully consider the frequency with which the view needs to be refreshed and the impact of the view on disk space and other resources.

How Materialised Views works in PostgreSQL?

In PostgreSQL, a materialized view is a precomputed table that stores the results of a query. The data in the materialized view is stored on disk, and unlike regular views, the result set of a materialized view is stored persistently. This can be useful for performance reasons, as queries against a materialized view can be faster than running the underlying query each time.

When a materialized view is created, it is populated with data using a SELECT statement that defines the data to be included in the view. Subsequently, the data in the materialized view is updated periodically, based on a refresh schedule or on demand.

The data in a materialized view is stored in a physical table on disk, and can be indexed like any other table. When querying a materialized view, PostgreSQL reads the data directly from the physical table, avoiding the need to execute the underlying query each time.

However, since the data in the materialized view is precomputed and stored on disk, it can become stale over time. To ensure that the data in the materialized view stays up-to-date, it needs to be refreshed periodically. This can be done manually or automatically, using a scheduled refresh or a trigger-based refresh.

Overall, materialized views can be a powerful tool for improving query performance in PostgreSQL, but they require careful management to ensure that the data is kept up-to-date and that the refresh process doesn’t impact system performance.

About Shiv Iyer 157 Articles
Open Source Database Systems Engineer with a deep understanding of Optimizer Internals, Performance Engineering, Scalability and Data SRE. Shiv currently is the Founder, Investor, Board Member and CEO of multiple Database Systems Infrastructure Operations companies in the Transaction Processing Computing and ColumnStores ecosystem. He is also a frequent speaker in open source software conferences globally.