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