Sql 是否可以缓存子查询的某些可变结果?

Sql 是否可以缓存子查询的某些可变结果?,sql,postgresql,postgresql-9.1,postgresql-9.2,Sql,Postgresql,Postgresql 9.1,Postgresql 9.2,我在postgresql 9.1中有类似的查询 SELECT id FROM students INNER JOIN exams ON /some condition WHERE studentsid NOT IN (SUBQUERY); 当我只运行子查询时,它会在120ms内执行,当我使用子查询无条件执行上一个查询时,它会执行12秒,但当我添加子查询时,它会运行半小时 是否可以缓存子查询的某些可变结果(结果总是相同的ID数组)并在console/pgadmin中执行? 我找到WITH语句,但

我在postgresql 9.1中有类似的查询

SELECT id
FROM students
INNER JOIN exams ON /some condition
WHERE studentsid NOT IN (SUBQUERY);
当我只运行子查询时,它会在120ms内执行,当我使用子查询无条件执行上一个查询时,它会执行12秒,但当我添加子查询时,它会运行半小时 是否可以缓存子查询的某些可变结果(结果总是相同的ID数组)并在console/pgadmin中执行?
我找到WITH语句,但它似乎在postgres中不受支持。首先,postgres中支持WITH语句

其次,您需要确定性能问题在哪里。它在子查询中吗?还是
不在

您可以将子查询放入表中,添加索引,并提高查询效率

您可以使用
左联接
重写子查询,这通常会使查询得到更好的优化

您可以添加适当的索引,使整个查询更加高效


在不知道子查询实际做什么的情况下,正确的方法是推测。

首先,用左反联接或
不存在
语句替换
不在
中。PostgreSQL更有可能有效地优化这一点。然后查看查询的
EXPLAIN ANALYZE
输出,以确定它在做什么。如果确实必须“缓存”子查询的结果,则可以创建一个
未标记的
表,并将其维护为物化视图。