我有这样一个查询:优化多个子查询与子句中的Oracle
select
qsn.code,
(select prs.display_name from prs where prs.id = qsn.fk_prs) display_name,
(select prs.address from prs where prs.id = qsn.fk_prs) address,
(select prs.tel from prs where prs.id = qsn.fk_prs) tel
from
qsn
where
qsn.register_date between :x1 and :x2
当我看到查询的执行计划,它查询prs
表3倍(使用INDEX UNIQUE SCAN
每次)。
我不知道是否可以查询一次使用WITH子句prs
表?我如何以这种方式编写查询。
我会提到,因为每个表都有数百万条记录,所以加入它们会使查询速度变慢。
没有看到你的执行计划,只有疯狂的猜测是可能的。请为这两个查询发布[执行计划](http://stackoverflow.com/questions/34975406/how-to-describe-performance-issue-in-relational-database?answertab=active#tab-top)(使用子查询和加入)。你的观察的一个解释是你切换到散列连接(在两个表上都有可能的FTS),另一种解释是你从标量子查询兑现中获利(如果'qsn.fk_prs'的数目相对较少)。 –