3000万条INSERT语句如何提高效率?

ralln 2015-10-29 10:25:07
现在我遇到了一个问题,有个数据库的表A有3000万条左右的数据,需要我做的就是把这个表中所有加密的信息,转换成明文后,存入另外一个表B中

由于每条都有加密的信息,所以在程序里我便每次读出5000条,然后一条条解密,并拼装好INSERT语句插入到表B中,这5000条插入结束后,再读下5000条

但是,这样效率实在是有点低,从昨天下午2点半到今天上午10点这18个小时多的时间里,执行了1500万条

有没有什么办法可以提高点效率呢?

对了,不要那种5000条翻译好了拼一个SQL语句的,我知道那样会提高点效率,不过可能出错,毕竟现下一条条执行的情况有的还会报1366错误呢

也不要说每次读出10000条之类的,容易出2006错误
...全文
623 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40622464 2019-08-20
  • 打赏
  • 举报
回复
多线程,合并事务,sql优化,批量处理
rucypli 2015-10-29
  • 打赏
  • 举报
回复
把数据库参数innodb_flush_log_at_trx_commit改为0
benluobo 2015-10-29
  • 打赏
  • 举报
回复
用PrepareStatement 进行Insert 每次处理1000-10000条数据
ceffective 2015-10-29
  • 打赏
  • 举报
回复
LZ没掌握多线程编程、内存操作这两个概念,5000万条数据普通的四核电脑一个小时就可以转化完了
文修 2015-10-29
  • 打赏
  • 举报
回复
个人建议楼主用:一条SQL语句插入多条数据, 普通插入INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); 改为:INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1); 我做过测试,时间有大的提升: 记录数 单条数据插入 多条数据插入 1百 0.149s 0.011s 1千 1.231s 0.047s 1万 11.678s 0.218s 还可以使用事物,就是 START TRANSACTION; INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); ... COMMIT; 合并SQL语句和使用事物可以提高悦50倍的速度,建议楼主试一下

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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