当前位置: 代码迷 >> Oracle开发 >> merge into 越来越慢,求教大伙
  详细解决方案

merge into 越来越慢,求教大伙

热度:758   发布时间:2016-04-24 06:37:33.0
merge into 越来越慢,求教大家
merge into A  
using B       
ON (A.DD_PARTITION_DATE  = B.DD_PARTITION_DATE
......
)
WHEN NOT MATCHED THEN
  INSERT。。。。

没有update,索引全部drop掉了。每天都跑
A表是将近1亿的大表(按7天一个分区的表,),B表数据量在200万左右
A表数据量越来越大时,为什么越跑越慢,请问有什么办法提高速度吗?怎么知道分区有作用吗?这个语句每次都是B表每条数据都和A表全表比对的吗?
------解决方案--------------------
针对这个语句来说,分不分区都会将整个表拿来做hash连接
对于这样的大表,最好不要全表merge
可以分批进行,配合分区

比如a表有3个分区,DD_PARTITION_DATE  范围分别是date'2014-1-1' 到date'2014-1-31'、date'2014-2-1' 到 date'2014-2-28' 、date'2014-3-1'到date'2014-3-31'
b表的DD_PARTITION_DATE  值也在这3个范围内。分3批来merge
merge into a partition (p201301) t1
using (select * from b where b.DD_PARTITION_DATE>= ........ and b.DD_PARTITION_DATE  <....) t2
on (t1.DD_PARTITION_DATE  =t2.DD_PARTITION_DATE  )
.................


如果分区较多,可以写个存储过程来拼接执行
  相关解决方案