复杂视图的运行会比预期更慢。
但是,当视图定义的复杂性导致要创建一个临时表来处理查询时,依靠视图的查询的执行可能比预期要慢。该临时表被称为具体化的视图。例如:您可以使用 union 创建一个视图合并几个 SELECT 语句的结果。
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 a, b, c, d FROM view1 WHERE a < 10;
但是,依靠 view1 的此查询可能比预期要慢,这是因为数据库服务器在执行该查询之前要为视图创建一个分段临时表。
如果您使用 ANSI 连接中的一个视图,那么查询的执行速度可能比预期要慢。视图定义的复杂性可能将导致要创建临时表。
为了确定您是否具有一个必须建立临时表来处理视图的查询,需执行 SET EXPLAIN 语句。如果在 SET EXPLAIN 输出文件中发现用于视图的临时表,那么查询需要一个临时表来处理该视图。