如何快速的将已知的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‘, ‘[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].com‘),
(‘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条数据。

原文地址:https://www.cnblogs.com/cgy-home/p/11080628.html

时间: 2024-10-29 16:11:45

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

QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)

如何使QTreeView快速显示1000万条数据,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习. 我开始使用的QTreeWidget 控件来显示我的数据,发现该控件在显示10000行以下的数据还可以应付的过来,但超过10000条,就明显感觉到屏幕刷新就会有卡的现象,而且占据内存很大,虽然操作起来简单方便,但灵活性没有QTreeView强大.因为我要显示的数据量是非常大的,甚至过1000万,因此,采用

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

1.使用dual配合connect by level create table BigTable as select rownum as id from dual connect by level <= 100000; 但是有connect by level有上限,如果超出上限,系统会报,"connect by level"内存不足,我试过1000000万数据可以,但是再多就不行了. 2. 使用xmltable,"CONNECT BY 操作内存不足,10g开始支持XML

再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化

继上篇文章<绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来>发布后在博客园首页展示得到了挺多的阅读量,我这篇文章就是对上篇文章的千万级数据库表在高并发访问下如何进行测试访问 这篇文章的知识点如下: 1.如何自写几十行代码就能模拟测试高并发下访问千万级数据库表 2.比较高并发下(200次/秒,2000次/秒,10000次/秒)数据库的性能 3.比较千万级数据库在查询时加索引与不加索引的巨大差异(说实话,这个测试结果让我自己本人也很惊讶) 针对上篇文章插入的1000万条数据

POJ 2208 已知空间四面体六条边长度,求体积

Pyramids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2718   Accepted: 886   Special Judge Description Recently in Farland, a country in Asia, a famous scientist Mr. Log Archeo has discovered ancient pyramids. But unlike those in Egyp

例6.13 已知一个一维数组a[1..n](n&lt;25),又已知一整数m。 如能使数组a中任意几个

/*例6.13 已知一个一维数组a1..n,又已知一整数m. 如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO.[分析]对于一个已确定的数组a[1..n]和一个确定的数m,判断能否使数组a中任意几个元素之和等于m,等价于判断能否从数组a中取任意数使其和为m. 对于a中任意元素a[n]只有取与不取两种情况: (1)取a[n]: 则此时问题转化为:对于一个已确定的数组a[1..n-1]和一个确定的数m-a[n],判断能否使数组a[1..n-1]中任意几个元素之和等于m-a[n]. (

Fundebug累计处理1000万条错误事件!

摘要: 上线半年时间,Fundebug累计处理1000万条错误事件.10000000啊! 自从去年双11正式上线,Fundebug已稳定运行半年时间,为600余个开发团队提供全栈JavaScript错误实时监控服务.目前,我们已经累计处理了1000万条错误事件,依靠自创的错误智能聚合算法,我们将这1000万条错误事件聚合为约1.9万个不同的错误. 根据初步统计,这些错误事件的分布基本上符合二八原理:少数用户的错误事件数占了错误事件总数的大部分:每个用户的少数错误重复出现的次数占了该用户所有错误事

1000万条用户名密码数据概览

一名安全研究员发布了一份包含1000万条记录的用户名.密码文件.原文可见: Today I Am Releasing Ten Million Passwords 下载下来看看: 确实是刚好有1000万条记录 $ wc -l 10-million-combos.txt 10000000 10-million-combos.txt 共有两列,分别是username.password $ head 10-million-combos.txt 0000 00000000 0000 00001 0000

Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

首先登陆进入Mysql命令行  执行sql      show variables like 'slow_query%';  结果为OFF 说明还未开启慢查询 执行sql     show variables like 'long_query_time';  可以看到具体的慢查询 ""时限" 我们先开启慢查询 执行sql set global slow_query_log='ON'; 这是再去查询一下(show variables like 'slow_query%';)发现

已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列的第一个字母肯定就是根节点,即A是根节点:然后,由于中序遍历先访问左子树,再访问根节点,最后访问右子树,所以我们找到中序遍历中A的位置,然后A左边的字母就是左子树了,也就是CBD是根节点的左子树:同样的,得到EF为根节点的右子树. 将前序遍历序列分成BCD和EF,分别对左子树和右子树应用同样的方法,