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

时间:2014-01-31 12:58:55

标签: 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语句,但在postgres中看起来不支持

1 个答案:

答案 0 :(得分:1)

首先,Postgres支持with语句

其次,您需要确定性能问题的位置。它在子查询中吗?或者是not in

您可以将子查询放在表中,添加索引,并使查询更有效。

您可以使用left join重写子查询,这通常可以更好地优化查询。

您可以添加适当的索引,以提高整个查询的效率。

如果不知道子查询实际上做了什么,那么正确的方法就是推测。