自动查询重写以使用具体化视图 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

自动查询重写以使用具体化视图

您可以在 Amazon Redshift 中使用具体化视图的自动查询重写,让 Amazon Redshift 重写查询以使用具体化视图。这样做可加速查询工作负载,即使对于没有显式引用具体化视图的查询也是如此。当 Amazon Redshift 重写查询时,它只使用最新的具体化视图。

使用说明

要检查查询是否使用自动重写查询,可以检查查询计划或 STL_EXPLAIN。下面显示了 SELECT 语句和原始查询计划的 EXPLAIN 输出。

SELECT catgroup, SUM(qtysold) AS sold FROM category c, event e, sales s WHERE c.catid = e.catid AND e.eventid = s.eventid GROUP BY 1; EXPLAIN XN HashAggregate (cost=920021.24..920021.24 rows=1 width=35) -> XN Hash Join DS_BCAST_INNER (cost=440004.53..920021.22 rows=4 width=35) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales s (cost=0.00..7.40 rows=740 width=6) -> XN Hash (cost=440004.52..440004.52 rows=1 width=37) -> XN Hash Join DS_BCAST_INNER (cost=0.01..440004.52 rows=1 width=37) Hash Cond: ("outer".catid = "inner".catid) -> XN Seq Scan on event e (cost=0.00..2.00 rows=200 width=6) -> XN Hash (cost=0.01..0.01 rows=1 width=35) -> XN Seq Scan on category c (cost=0.00..0.01 rows=1 width=35)

下面显示了成功自动重写后的 EXPLAIN 输出。此输出包括对查询计划中的具体化视图的扫描,该视图将替换原始查询计划的部分。

* EXPLAIN XN HashAggregate (cost=11.85..12.35 rows=200 width=41) -> XN Seq Scan on mv_tbl__tickets_mv__0 derived_table1 (cost=0.00..7.90 rows=790 width=41)

只有最新的(新的)具体化视图才会被考虑用于查询的自动重写,而不考虑刷新策略(如自动、计划或手动)。因此,原始查询将返回最新结果。当在查询中显式引用具体化视图时,Amazon Redshift 会访问当前在具体化视图中存储的数据。此数据可能不会反映具体化视图基表中的最新更改。

您可以对集群版本 1.0.20949 或更高版本创建的具体化视图使用自动查询重写。

您可以通过使用 SET mv_enable_aqmv_for_session to FALSE 来禁用会话级别的自动查询重写。

Limitations

以下是使用具体化视图的自动查询重写的限制:

  • 自动查询重写适用于不引用或不包含以下任何操作的具体化视图:

    • 子查询

    • Left、right 或 full outer 联接

    • 设置操作

    • DISTINCT 聚合

    • 窗口函数

    • 除 SUM 或 COUNT 之外的任何聚合

    • SELECT DISTINCT 或 HAVING 子句

    • 外部表

    • 其他具体化视图

  • 自动查询重写将重写引用用户定义的 Amazon Redshift 表的 SELECT 查询。Amazon Redshift 不会重写以下查询:

    • CREATE TABLE AS 语句

    • SELECT INTO 语句

    • 对目录或系统表的查询

    • 具有外部联接或 SELECT DISTINCT 子句的查询

  • 如果没有自动重写查询,请检查您是否具有对指定的具体化视图的 SELECT 权限,且 mv_enable_aqmv_for_session 选项是否被设置为 TRUE。

    您还可以通过检查 STV_MV_INFO 来检查具体化视图是否符合自动重写查询的条件。有关更多信息,请参阅STV_MV_INFO