如何快速的将已知的1000万条数据插入到数据库中

Posted cgy-home

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速的将已知的1000万条数据插入到数据库中相关的知识,希望对你有一定的参考价值。

首先,可以定义1个1000万次的循环,每次循环插入1条数据,当1000万次循环全部执行结束,则插入完成!

也可以使用1条INSERT语句插入多条数据,例如:

INSERT INTO t_user (username, password, age, phone, email) VALUES
(user01, password01, 11, 13800138001, [email protected]),
(user02, password02, 12, 13800138002, [email protected]),
(user03, password03, 13, 13800138003, u[email protected]),
(user04, password04, 14, 13800138004, [email protected]),
(user05, password05, 15, 13800138005, [email protected]),
(user06, password06, 16, 13800138006, [email protected]),
(user07, password07, 17, 13800138007, [email protected]),
(user08, password08, 18, 13800138008, [email protected]),
(user09, password09, 19, 13800138009, [email protected]),
(user10, password10, 20, 13800138010, [email protected]),
(user11, password11, 21, 13800138011, [email protected]),
(user12, password12, 22, 13800138012, [email protected]),
(user13, password13, 23, 13800138013, [email protected]),
(user14, password14, 24, 13800138014, [email protected]),
(user15, password15, 25, 13800138015, [email protected]),
(user16, password16, 26, 13800138016, [email protected]),
(user17, password17, 27, 13800138017, [email protected]),
(user18, password18, 28, 13800138018, [email protected]),
(user19, password19, 29, 13800138019, [email protected]),
(user20, password20, 30, 13800138020, [email protected]);

所以,可以将1000万条数据尝试以上的拼接再来执行,但是,由于拼接过长的SQL语句字符串会导致拼接时的效率非常低,所以,不可以使用1个字符串拼出1次插入太多数据的!可行的解决方案可以是:例如使用1条SQL语句插入1000条数据,并且把这样的做法循环1万次,就可以解决这个问题!

另外,还可以通过批处理解决性能问题,其核心是一次性向mysql发送多条SQL指令,但并不直接执行,而是当发送到一定数量或满足一次条件后,再由MySQL执行多条SQL指令。

由程序将SQL指令发送到MySQL,并执行,其执行效率存在的问题可能有:

  1. 程序可能是运行在应用服务器上的,例如运行在Tomcat服务器上,而MySQL可能是专门的服务器,即程序和MySQL并不在同一台服务器上,每次需要执行SQL指令时,首先需要建立与MySQL服务器的连接,才可以将SQL指令传送到MySQL服务器,甚至,即使使用的是同一台服务器,这个连接、传送的过程依然是存在的!通过批处理的做法可以进行优化,即:只用建立1次连接,就可以传送100甚至1000甚至更多条SQL语句,从而大大的减少连接次数!

  2. 当SQL指令送达MySQL服务器后,在执行之前,还必须经过编译、解释、词法分析、语义分析等过程,才可以被执行!所以,如果使用1条SQL语句插入10条数据,肯定比循环10次却每次插入1条数据的效率要高得多!

所以,如果是1000万次的循环,每次插入1条数据,问题就出在:需要建立1000万次连接MySQL的过程,并需要在执行之前检查1000万条SQL指令!

解决方案中的第1点肯定是使用批处理的做法,减少连接次数!第2点就是使用同1条SQL指令插入多条数据,则可以减少编译、分析的次数!所以,最终的解决方案可以是循环100次,每次都是1个批处理,每个批处理中发送100条SQL指令,每个SQL指令插入1000条数据。

以上是关于如何快速的将已知的1000万条数据插入到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

数据库快速插入1000万条记录

Oracle 快速插入1000万条数据的实现方式

mysql大批量插入数据的正确做法

hive 表造数据几百万条怎么快速生成

4分钟插入1000万条数据到mysql数据库表

如何快速安全的插入千万条数据?