开发者社区> 问答> 正文

mysql 程序代码实现循环 和 存储过程 实现循环

我又一个表A,三个子表B、C和D, 表A与bcd都是一一对应,

现在需求是:

表A一次插入10万条记录,同时,bcd表也要插入10万条记录;

后台java+hibernate:save(list),然后save(list),然后save(list),最后save(list),这样插入1万条,差不多就需要10分钟(开发环境)。

我用mysql写存储过程,while循环中,insert a,insert b,insert c,insert d,这样循环10万次,发现时间更久(1万条二十分钟左右)。

问题:

1.为什么存储过程反而慢,是因为不停的变换操作的表么

2.有没有什么方法可以解决这个效率问题,插入10万条记录实在太慢

求高手解答啊

展开
收起
爵霸 2016-03-04 11:18:29 2895 0
1 条回答
写回答
取消 提交回答
  • 没遇到过这样,一次插入这么多。不过如果是我的话,我可能会生成sql文件/语句去执行。

    可能的问题:

    1.bcd表都需要a表的主键作为外键,而a表的主键有可能是自增的,这时在插入a表时要记录a表当时最大的id,以便推测下一个id的值,这样对于bcd表只需要在最大的id上增加就行,外键就不会有问题。

    2.对于a表与bcd表为uuid(或者类似时),先将a插入,记录每次的主键,再将bcd的表要插入的记录拼接成sql语句一次执行。

    猜测你的问题:save(List)/存储过程,是一条一条的执行,而不是一次执行。

    mysql中(oracle应该也有类似的),第二种的速度极快:

    1:insert into a (a,b,c);insert a (a1,b1,c1); //单条插入,插入2条数据,执行两次

    2:insert into a (a,b,c),(a1,b1,c1); //一次插入2条,执行一次。

    2019-07-17 18:51:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像