我有一个类似如下的SQL查询:
select *
from TableA
left outer join TableB on...
left outer join TableC on...
...
left outer join TableN on...
where
TableA.id in (subquery);
这个查询需要很长时间才能执行,我检查了它的执行计划,并发现它首先进行了连接,然后是where。但是,连接需要很长时间才能完成。我针对Oracle运行相同的查询,Oracle进行了优化,以便它将“where”部分与连接一起进行,因此时间很短。
我的问题是:如何优化SQL查询以便Postgres可以先执行'where'部分?
PS:我无法使用内部联接将子查询添加到“from”部分,因为我使用的是Hibernate,并且它不支持“from”部分中的子查询。
答案 0 :(得分:0)
正如您对帖子的评论中已广泛讨论的那样," FROM(子查询)tblalias"方法可能仍然有效,所以这里又是伪代码:
select * from (
select * from TableA where id in (subquery)
) tblA
left outer join TableB on...
left outer join TableC on...
...
left outer join TableN on...
但是 - 谁知道明确,因为伪代码无法测试...