您好我需要优化下面的 sql 查询。
insert into exa_table (column1, column2, column3, column4)
select value1, value2, value3, value4 from
(select tb2.ID, tb2.PARCELNO, tb2.SHP_ID, tb4.CUST_ID
from exa_table2 tb2
join table3 tb3 on tb2.ID = tb3.ID
join table4 tb4 on tb3.ID = tb4.ID
where tb2.STATUS='1' and tb2.ACTIVE='1' and tb2.DATE >= '20180924' AND tb2.SDATE < '20181024' and
tb4.STATUS='1' and tb4.ACTIVE='1' and
not exists (select 1 from exa_table Q where Q.ID = tb2.ID));
我已经尝试通过添加 APPEND NOLOGGING 和 PARALLEL 来优化查询,就像这样
insert /*+ APPEND NOLOGGING */ into exa_table (column1, column2, column3, column4)
select value1, value2, value3, value4 from
(select /*+ PARALLEL(4) */ tb2.ID, tb2.PARCELNO, tb2.SHP_ID, tb4.CUST_ID
from exa_table2 tb2
join table3 tb3 on tb2.ID = tb3.ID
join table4 tb4 on tb3.ID = tb4.ID
where tb2.STATUS='1' and tb2.ACTIVE='1' and tb2.DATE >= '20180924' AND tb2.SDATE < '20181024' and
tb4.STATUS='1' and tb4.ACTIVE='1' and
not exists (select 1 from exa_table Q where Q.ID = tb2.ID));
现在好多了,但仍然不够 - 花了 13 分钟插入约 100k 行
您对如何改进查询有任何想法吗?