Select id,
(Select sum(totalpay)
from Table2 t
where t.id = a.id
and t.transamt > 0
and t.paydt BETWEEN TRUNC(sysdate-0-7) and TRUNC(sysdate-0-1)) As Pay
from Table1 a
尽管在transamt,paydt和id上有索引,但Table2上的子查询的成本非常昂贵,需要进行FULL TABLE扫描。
这个子查询能否以其他方式进行优化? 请帮忙。
答案 0 :(得分:0)
试试这个:
Select a.id,
pay.totalpay
from Table1 a
(Select t.id, sum(totalpay) totalpay
from Table2 t
where t.transamt > 0
and t.paydt BETWEEN TRUNC(sysdate-0-7) and TRUNC(sysdate-0-1)
group by t.id
) As Pay
where a.id = pay.id
通过将列(本示例中的id列)连接到子查询来推送组,以计算Table2中所有值的结果,然后与Table1表连接。 在原始查询中,您可以从Table1表中读取完整Table2表中每个乌鸦的结果。