网易首页 > 网易号 > 正文 申请入驻

怎么快速插入 100 条数据,用时最短

0
分享至

  

  作者:孤独键客

  https://juejin.im/post/5d255ab9e51d454f73356dcd

  最近群里的学习氛围又浓厚了起来。 群友又抛出了一道面试题,有人给出了答案,看完后,是否还有改进的地方,留言评论,一起精进吧! 多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的:

  链接耗时 (30%)

  发送query到服务器 (20%)

  解析query (20%)

  插入操作 (10% * 词条数目)

  插入index (10% * Index的数目)

  关闭链接 (10%)

  从这里可以看出来,真正耗时的不是操作,而是链接,解析的过程。 MySQL插入数据在写阶段是独占的,但是插入一条数据仍然需要解析、计算、最后才进行写处理,比如要给每一条记录分配自增id,校验主键唯一键属性,或者其他一些逻辑处理,都是需要计算的,所以说多线程能够提高效率。 多线程插入(多表) 分区分表后使用多线程插入。 预处理SQL

  普通SQL,即使用Statement接口执行SQL

  预处理SQL,即使用PreparedStatement接口执行SQL

  使用PreparedStatement接口允许数据库预编译SQL语句,以后只需传入参数,避免了数据库每次都编译SQL语句,因此性能更好。 String sql = "insert into testdb.tuser (name, remark, createtime, updatetime) values (?, ?, ?, ?)";
for (int i = 0; i < m; i++) {
//从池中获取连接
Connection conn = myBroker.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int k = 0; k < n; k++) {
pstmt.setString(1, RandomToolkit.generateString(12));
pstmt.setString(2, RandomToolkit.generateString(24));
pstmt.setDate(3, new Date(System.currentTimeMillis()));
pstmt.setDate(4, new Date(System.currentTimeMillis()));
//加入批处理
pstmt.addBatch();
}
pstmt.executeBatch(); //执行批处理
pstmt.close();
myBroker.freeConnection(conn); //连接归池
}
多值插入SQL

  普通插入SQL:INSERT INTO TBL_TEST (id) VALUES(1)

  多值插入SQL:INSERT INTO TBL_TEST (id) VALUES (1), (2), (3)

  使用多值插入SQL,SQL语句的总长度减少,即减少了网络IO,同时也降低了连接次数,数据库一次SQL解析,能够插入多条数据。 事务(N条提交一次) 在一个事务中提交大量INSERT语句可以提高性能。 1、将表的存储引擎修改为InnoDB
2、将 sql 拼接成字符串,每 1000 条左右提交事务。 /// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>mysql数据库
/// <param name="SQLStringList">多条SQL语句</param>
public void ExecuteSqlTran(List<string> SQLStringList)
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
if (DBVariable.flag)
{
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
MySqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
//后来加上的
if (n > 0 && (n % 1000 == 0 || n == SQLStringList.Count - 1))
{
tx.Commit();
tx = conn.BeginTransaction();
}
}
//tx.Commit();//原来一次性提交
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
}
}
}

  10w条数据大概用时10s!

  ———— e n d ————

  微服务、高并发、JVM调优、面试专栏等20大进阶架构师专题请关注公众号Java进阶架构师后在菜单栏查看

  

  看到这里,说明你喜欢本文

  你的转发,是对我最大的鼓励!在看亦是支持

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐

王祖蓝搭卧铺车交友交了个寂寞 网友评论:很少有人坐高铁买卧铺

ETtoday星光云
2020-11-30 17:16:45

57岁陈云升任中国铁路工程集团董事长,陈文健提名总经理

澎湃新闻
2020-12-01 11:49:51

申花本轮亚冠被逼平,球迷揪出场上最大罪人,直言他葬送球队好局

评球论事
2020-12-01 08:27:24

彻底火了!丁真接受CCTV专访了:我也不知道自己怎么火的

如花美眷小岳岳
2020-11-30 18:00:02

伊朗报复行动开始!首当其冲并非以色列,数名高级军官被炸身亡

龙猫视野
2020-11-30 13:43:03

我,36岁,程序员,工作11年,昨天公司通知不再续约

职场百科书
2020-12-01 12:11:42

为美军战舰“安家”? 岛内放出重磅消息 大陆打开天窗说亮话

张殿成
2020-11-30 13:57:58

清明上河图放大50倍后:那个树下乘凉的人,能不能注意一下形象?

辣么历史
2020-11-28 08:16:20

湖南最大的民营企业:超越三一蓝思科技,它一年进账1000多亿

钱包那些事儿
2020-12-01 08:54:03

晚新闻|“诋毁中医药将入刑”,取消|战疫优秀护士称因工伤遭强迫辞职

医学界
2020-11-30 22:29:01

粉色打底裤辣妈,成熟的那种美,就像秋天的果实一样

兔小影
2020-11-30 23:13:43

他60岁主政内蒙古,46岁任副部,57岁当选山西省长,今年68岁

思文有史说
2020-11-30 07:10:02

住在5元旅店的女人们

新京报
2020-11-30 23:05:19

美军基地遭猛烈袭击,五角大楼一片慌乱,伊朗这款无人机一战成名

北国先生
2020-12-01 01:19:13

46岁华人亿万富豪,死于离奇大火,疑点重重,伊万卡和贝佐斯震惊

推她
2020-12-01 10:15:51

拉夫桑贾尼家族:权势滔天,无人能撼动,却被内贾德一举铲除

枕猫
2020-11-27 20:35:00

财务自由是不可能的, 这辈子都不可能

stormzhang
2020-11-30 19:18:59

6折卖房,被骂惨了!房价降不下去的阻力在这里

大猫财经
2020-11-30 07:55:48

41岁女博士想与41岁男博士相亲,男博士:我只要20岁的姑娘

私家树洞
2020-11-30 09:13:49

我打了辉瑞制药公司新冠试验疫苗之后…

烟花灿烂的日子
2020-12-01 00:03:51
2020-12-01 14:08:59
java进阶架构师
java进阶架构师
关注java进阶架构师送架构
754文章数 8764粉丝数
往期回顾 全部

科技要闻

孟晚舟被捕两周年,华为:坚信她是清白的

头条要闻

男子自称被检察官索要十万元未给 出狱后楼顶喊冤

头条要闻

男子自称被检察官索要十万元未给 出狱后楼顶喊冤

体育要闻

亚冠-申花3-3珀斯 11分钟连扳3球遭点球绝平

娱乐要闻

张韶涵扎双马尾扮嫩 排骨身材太抢镜

财经要闻

汽车要闻

有真正Honda血统的小正太:又是一台贫民钢炮?

态度原创

艺术
亲子
时尚
教育
公开课

艺术要闻

近百件潘玉良画作成都将展

亲子要闻

你还在给新生儿穿“连体衣”?这衣服才让娃最舒服

王耀庆恶搞GQ封面 演技感人

教育要闻

陈铭被曝学术造假、硕士博士全靠打通关系,本尊回应

公开课

月入3000在中国是什么水平?谁才是普通人?