Sql 是否可以缓存子查询的某些可变结果?
我在postgresql 9.1中有类似的查询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语句,但
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
输出,以确定它在做什么。如果确实必须“缓存”子查询的结果,则可以创建一个未标记的
表,并将其维护为物化视图。