merge into 越来越慢,求教大家

记忆尤文 2014-08-25 11:07:17
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表全表比对的吗?
...全文
893 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
记忆尤文 2014-08-27
  • 打赏
  • 举报
回复
引用 4 楼 wildwave 的回复:
针对这个语句来说,分不分区都会将整个表拿来做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 ) ................. 如果分区较多,可以写个存储过程来拼接执行
谢谢
记忆尤文 2014-08-25
  • 打赏
  • 举报
回复
引用 2 楼 wildwave 的回复:
这个数据量上,应该做的是hash join outer 分区对效率应该没什么帮助
的确是hash join outer,为什么分区对效率没帮助呢?请问该怎么搞啊
小灰狼W 2014-08-25
  • 打赏
  • 举报
回复
这个数据量上,应该做的是hash join outer 分区对效率应该没什么帮助
bw555 2014-08-25
  • 打赏
  • 举报
回复
查看执行计划吧,越来越慢的话应该是分区没起作用
小灰狼W 2014-08-25
  • 打赏
  • 举报
回复
针对这个语句来说,分不分区都会将整个表拿来做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 ) ................. 如果分区较多,可以写个存储过程来拼接执行

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧