

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 了解实体化视图
<a name="understanding-materialized-views"></a>

## 视图
<a name="views"></a>

视图是基于 SQL `SELECT` 查询结果集的虚拟表。虚拟表包含从查询表达式中检索的数据，但结果不存储在磁盘上。使用视图时，您获得 up-to-date的数据总是最多，因为每次运行查询时，查询都会从原始表中提取数据。您可以从一个或多个基表或视图创建视图。您也可以像查询原始基表一样查询视图。

以下示例查询显示了如何创建视图：

```
CREATE VIEW tickets_view
AS    
   select e.eventname,
          sum(s.price) as total_sales
   from sales s
   join event e
       on e.eventid = s.eventid
   group by e.eventname;
```

以下示例查询显示了如何查询视图：

```
select eventname,
       total_sales
from ticket_view
where eventname = 'Gotterburg';
```

## 实体化视图
<a name="materialized-views"></a>

实体化视图是包含查询结果的数据库对象。例如，实体化视图可以是以下任何一种：
+ 远程数据的本地副本
+ 表或联接结果的行或列的子集
+ 使用聚合函数的摘要

## 视图类型比较
<a name="view-type-comparison"></a>

下表总结了视图和实体化视图之间的差异。


|  |  |  | 
| --- |--- |--- |
| **键** | **视图** | **实体化视图** | 
| 定义 | 一种虚拟表，它不存储任何数据，而是运行定义的 SQL 查询，从数据库中的一个或多个表中获取数据 | 由可编辑 SQL 查询定义的虚拟表，但查询结果存储在磁盘上 | 
| 存储 | 查询表达式的结果不存储在磁盘上，只有查询表达式存储在磁盘上 | 查询表达式和查询表达式的结果都存储在磁盘上 | 
| 运行 | 每次在查询中引用视图时，定义视图的查询都会运行。 | 查询结果存储在磁盘上，每次用户尝试从实体化视图中获取数据时，查询表达式都不会运行 | 
| 数据新近性 | 始终提供基表中的最新更新值 | 如果数据库中的值发生更改，则不提供最新更新的值 | 
| 成本 | 无存储成本 | 有存储成本 | 
| 设计 | 要创建标准视图，您必须：· 可访问基础表· 使用标准 `SELECT` 语句 | 要创建实体化视图，您必须：· 可访问基础表· 使用标准 `SELECT` 语句或者，您可以指定：· 实体化视图是否包含在自动和手动集群快照中，这些快照存储在 Amazon Simple Storage Service（Amazon S3）中· 实体化视图中的数据是如何分布和排序的· 实体化视图是否应根据基表中的最新更改自动刷新 | 
| 使用量 | 不经常访问或更新数据时 | 经常访问或更新数据时 | 