我有這樣一個查詢:優化多個子查詢與子句中的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'的數目相對較少)。 –