如何使用PostgreSQL物化视图
建站教程 2021-03-17 09:25 1751

PostgreSQL中的视图是图形表,显示来自相应表的数据。通用视图也可以修改。PostgreSQL通过允许视图实质性地存储信息(称为物化视图),将视图的概念带入了下一阶段。物化视图保留了耗时,复杂的查询的输出,使您可以随时快速查询结果。物化视图经常用于数据仓库和商业智能应用程序中,因为它们在需要快速访问数据的情况下很有用。

为什么要使用物化视图?

如果view命令对您来说太慢了,您可能更喜欢使用实例化视图。物化视图通过使您能够以较短的访问时间将其表示形式实质性地保留在数据库中而具有多种用途。假设您需要创建一个数据库查询来联接几个表,从联合的集合中删除行,并以各种方式对这些表进行排序。这可能是一个复杂且耗时的查询,并且如果没有实例化视图,您最终将使用实例化视图来解决这一难题。本文教您如何在PostgreSQL中使用实例化视图。

语法

>> CREATE MATERIALIZED VIEW view_name AS query WITH [NO] DATA;

此一般视图的解释如下:

View_name:要使用CREATE MATERIALIZED VIEW语句创建的视图的标题。

Query:从相应表中获取数据的查询。

WITH [NO] DATA:选择WITH DATA选项,以便在开发时将信息数据合并到实例化视图中;否则,选择“无数据”。如果使用WITH [NO] DATA选项,则该视图被标记为无法理解,这意味着除非先将数据加载到该视图中,否则您将无法从该视图中搜索信息。

如何使用物化视图

启动PostgreSQL命令行shell,开始在物化视图上工作。

提供服务器名称,要使用的数据库,端口号和用户名,以开始使用命令外壳程序。如果要使用默认系统,请将这些空格留空。

示例1:简单视图

要了解实例化视图,您首先需要了解简单视图。因此,使用附加的CREATE TABLE命令创建新表“ Student”。

>> CREATE TABLE Student (sid serial PRIMARY KEY, sname VARCHAR(100) NOT NULL, age VARCHAR(100) NOT NULL);

之后,使用INSERT查询将数据插入其中。

使用SELECT语句为简单视图获取“学生”表的记录。

>> SELECT * FROM Student;

示例2:简单的物化视图

现在,该介绍实例化视图了。我们将使用“学生”表创建实例化视图。我们将使用“ CREATE MATERIALIZED VIEW”命令创建一个名为“ std_view”的实例化视图。在此视图中,我们将从“学生”表中获取学生姓名字段“ sname”,并在“ sname”列中按升序进行分组和排序。

>> CREATE MATERIALIZED VIEW std_view AS SELECT sname FROM Student GROUP BY sname ORDER BY sname;

现在,使用SELECT查询执行视图,我们将在“学生”表的“名称”列中返回学生的姓名。

>> SELECT * FROM std_view;

示例3:使用WHERE子句的实例化视图

现在,我们将使用WHERE子句创建实例化视图。考虑下面的“学生”表,并对其值进行了一些更改。

然后,我们将使用“创建材料视图”查询创建一个名为“ teststd”的实例化视图。我们将使用WHERE子句选择“学生”表的记录,其中“年龄”列的值大于“ 25”。如图所示,查询正常工作。

>> CREATE MATERIALIZED VIEW teststd AS SELECT sid, sname, age FROM Student WHERE age > ‘25’;

最后,如下所示,我们将执行刚刚使用SELECT命令创建的实例化视图。您将看到它将返回“学生”表中的所有记录,其中“年龄”列的值大于“ 25”。

>> SELECT * FROM teststd;

示例4:使用WITH NO DATA子句刷新物化视图

在此示例中,我们将创建一个物化视图,在其中我们将使用WITH NO DATA子句刷新视图。假设下面的“学生”表的值有所更改。

现在,我们将创建物化的“ teststd”视图。该视图将从“学生”表中选择记录,其中学生的年龄小于“ 40”。提取的记录将按照“ sid”列中的升序进行分组和排序。在查询结束时,我们将使用WITH NO DATA子句来指示查询不会在物化视图中保存任何信息。下面显示的视图应成功执行这些操作。

>> CREATE MATERIALIZED VIEW teststd AS SELECT sid, sname, age FROM Student WHERE age < ‘40’ GROUP BY sid ORDER BY sid WITH NO DATA;

当您将'WITH NO DATA'子句添加到实例化视图时,这将创建一个空白视图。该实例化视图不可查询。如您在下图中所看到的,它没有在新创建的视图中获取记录。

REFRESH MATERIALIZED VIEW语句用于将数据导入到实例化视图中。通过在外壳程序中运行以下REFRESH MATERIALIZED VIEW查询来填充实例化视图。如您所见,此查询有效地工作了。

>> REFRESH MATERIALIZED VIEW teststd;

同样,在外壳程序中使用SELECT语句获取实例化视图“ teststd”的记录。这次,SELECT查询正常工作,因为'REFRESH'语句已将内容加载到实例化视图中。

示例5:删除实例化视图

以下命令将删除实例化视图。

>> DROP MATERIALIZED VIEW std_view;

本文向您展示了如何通过命令行Shell中的WHERE子句和REFRESH查询使用实例化视图。

标签:

  • PostgreSQL