有关数据库表数据删除

yongjun_wei 2015-03-27 08:07:41
情况是这样:
我现在有50张表,平均每张表的数据 均在500万以上,每张表中都有业务编号这个字段,我现在要将满足条件的接近400万笔业务编号的数据给删除,请问怎么删除最快?
如果用delete from xxx where id in(.......) 这种方式,有的表如果有大字段什么的, 得很慢很慢。
...全文
413 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
maitianhust 2015-03-27
  • 打赏
  • 举报
回复
你符合条件的业务编号的建成一个临时表,与其它表关联,做删除动作
lyangsoft 2015-03-27
  • 打赏
  • 举报
回复
delete from xxx where id in(.......) 目测in()里面是大量数据,建议使用exists IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况
yongjun_wei 2015-03-27
  • 打赏
  • 举报
回复
引用 3 楼 binsweet 的回复:
若业务允许: 1、把符合条件的数据采用create table ... as select * from ...方式插入到新表; 2、truncate table 旧表; 3、把新表数据插入到旧表,这样就完成了
这个方法想过,不过不是最合适的方法,毕竟有的表,要剩下的是500万中的250万这种的。 请问,能在sql语句层面进行优化?
yongjun_wei 2015-03-27
  • 打赏
  • 举报
回复
引用 2 楼 u012355452 的回复:
TRUNCATE TABLE
这个方法想过,不过不是最合适的方法,毕竟有的表,要剩下的是500万中的250万这种的。 请问,能在sql语句层面进行优化?
yongjun_wei 2015-03-27
  • 打赏
  • 举报
回复
引用 楼主 yongjun_wei 的回复:
情况是这样: 我现在有50张表,平均每张表的数据 均在500万以上,每张表中都有业务编号这个字段,我现在要将满足条件的接近400万笔业务编号的数据给删除,请问怎么删除最快? 如果用delete from xxx where id in(.......) 这种方式,有的表如果有大字段什么的, 得很慢很慢。
生产环境暂时不允许修改数据库相关参数,由于这些数据是银行数据,所以安全性考虑很高,所以,只能在SQL语句方面做手脚了。
yongjun_wei 2015-03-27
  • 打赏
  • 举报
回复
引用 8 楼 maitianhust 的回复:
你符合条件的业务编号的建成一个临时表,与其它表关联,做删除动作
嗯,有想过,不过 我的exists用得不熟,我先去百度下试试
yongjun_wei 2015-03-27
  • 打赏
  • 举报
回复
引用 8 楼 maitianhust 的回复:
你符合条件的业务编号的建成一个临时表,与其它表关联,做删除动作
嗯 ,是的,目前建立了另一个临时表存储了业务编号,只有一个列,800多万条数据。
binsweet 2015-03-27
  • 打赏
  • 举报
回复
若业务允许: 1、把符合条件的数据采用create table ... as select * from ...方式插入到新表; 2、truncate table 旧表; 3、把新表数据插入到旧表,这样就完成了
lyangsoft 2015-03-27
  • 打赏
  • 举报
回复
TRUNCATE TABLE
CT_LXL 2015-03-27
  • 打赏
  • 举报
回复
引用 楼主 yongjun_wei 的回复:
情况是这样: 我现在有50张表,平均每张表的数据 均在500万以上,每张表中都有业务编号这个字段,我现在要将满足条件的接近400万笔业务编号的数据给删除,请问怎么删除最快? 如果用delete from xxx where id in(.......) 这种方式,有的表如果有大字段什么的, 得很慢很慢。
删除时加NO LOGGING选项。

17,089

社区成员

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

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