视图开销

复杂视图的运行会比预期更慢。

您可出于以下多种原因创建表的视图:

但是,当视图定义的复杂性导致要创建一个临时表来处理查询时,依靠视图的查询的执行可能比预期要慢。该临时表被称为具体化的视图。例如:您可以使用 union 创建一个视图合并几个 SELECT 语句的结果。

以下样本 SQL 语句创建一个包含 union 的视图:
CREATE VIEW view1 (col1, col2, col3, col4)
      AS 
      SELECT a, b, c, d
                  FROM tab1 WHERE 
            UNION
            SELECT a2, b2, c2, d2
         FROM tab2 WHERE
...
            UNION
            SELECT an, bn, cn, dn
         FROM tabn WHERE
;
当您创建一个包含复杂的 SELECT 语句的视图时,最终用户不需要处理复杂性。最终用户只可以写一个简单的查询,如以下示例所示:
SELECT a, b, c, d
      FROM view1
            WHERE a < 10;

但是,依靠 view1 的此查询可能比预期要慢,这是因为数据库服务器在执行该查询之前要为视图创建一个分段临时表。

如果您使用 ANSI 连接中的一个视图,那么查询的执行速度可能比预期要慢。视图定义的复杂性可能将导致要创建临时表。

为了确定您是否具有一个必须建立临时表来处理视图的查询,需执行 SET EXPLAIN 语句。如果在 SET EXPLAIN 输出文件中发现用于视图的临时表,那么查询需要一个临时表来处理该视图。