在视图上运行查询或使用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%'
答案 0 :(得分:2)
通常,PostgreSQL中的视图存储为SELECT查询,因此您问题中的两个查询之间的性能应该相同。
如果影片表不经常更新,每天只说一次,但经常执行查询,则可以使用物化视图。它将表现为使用CTAS(CREATE TABLE ... AS ...)创建的表,但也会存储用于创建它的SQL查询,因此您可以按需刷新实例化视图。
通常,视图用于连接,而不是用于选择。