3000万条INSERT语句怎么样提高效率?

MySql 码拜 9年前 (2016-02-18) 1221次浏览
现在本人遇到了一个问题,有个数据库的表A有3000万条左右的数据,需要本人做的就是把这个表中全部加密的信息,转换成明文后,存入另外一个表B中
由于每条都有加密的信息,所以在程序里本人便每次读出5000条,然后一条条解密,并拼装好INSERT语句插入到表B中,这5000条插入结束后,再读下5000条
但是,这样效率实在是有点低,从昨天下午2点半到今天上午10点这18个小时多的时间里,执行了1500万条
有没有什么办法可以提高点效率呢?
对了,不要那种5000条翻译好了拼一个SQL语句的,本人知道那样会提高点效率,不过可能出错,毕竟现下一条条执行的情况有的还会报1366错误呢
也不要说每次读出10000条之类的,容易出2006错误
解决方案

40

个人建议LZ用:一条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倍的速度,建议LZ试一下

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明3000万条INSERT语句怎么样提高效率?
喜欢 (0)
[1034331897@qq.com]
分享 (0)