视图与具有where子句的查询之间的性能差异

时间:2013-09-13 20:36:33

标签: sql postgresql

在视图上运行查询或使用where子句在关联的视图查询之间是否存在(大)性能差异?

E.g。

CREATE VIEW v_comedies AS
    SELECT *
    FROM films
    WHERE kind = 'Comedy';

这些查询之间是否存在性能差异?

1: SELECT * FROM v_comedies WHERE filmName LIKE 'Bat%'
2: SELECT * FROM films WHERE kind = 'Comedy' AND filmName LIKE 'Bat%'

1 个答案:

答案 0 :(得分:2)

通常,PostgreSQL中的视图存储为SELECT查询,因此您问题中的两个查询之间的性能应该相同。

如果影片表不经常更新,每天只说一次,但经常执行查询,则可以使用物化视图。它将表现为使用CTAS(CREATE TABLE ... AS ...)创建的表,但也会存储用于创建它的SQL查询,因此您可以按需刷新实例化视图。

通常,视图用于连接,而不是用于选择。