MySQL 插入 100 行数据,用时最短的获得 Offer!

117次阅读
没有评论

共计 771 个字符,预计需要花费 2 分钟才能阅读完成。

一道面试题,有人给出了答案,看完后,是否还有改进的地方,留言评论,一起精进吧!

多线程插入(单表)

问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗?答:在数据里做插入操作的时候,整体时间的分配是这样的:

  • 链接耗时 (30%)
  • 发送query到服务器 (20%)
  • 解析query (20%)
  • 插入操作 (10% * 词条数目)
  • 插入index (10% * Index的数目)
  • 关闭链接 (10%)

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

多线程插入(多表)

分区分表后使用多线程插入。

预处理SQL

  • 普通SQL,即使用Statement接口执行SQL
  • 预处理SQL,即使用PreparedStatement接口执行SQL

使用PreparedStatement接口允许数据库预编译SQL语句,以后只需传入参数,避免了数据库每次都编译SQL语句,因此性能更好。

MySQL 插入 100 行数据,用时最短的获得 Offer!


多值插入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、将表的存储引擎修改为myisam
2、将 sql 拼接成字符串,每 1000 条左右提交事务。

MySQL 插入 100 行数据,用时最短的获得 Offer!

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

来源 | http://rrd.me/enSqt

更多精彩内容,关注我们▼▼

MySQL 插入 100 行数据,用时最短的获得 Offer!
正文完
 0
数据与人
版权声明:本站原创文章,由 数据与人 于2023-05-16发表,共计771字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,若要转载请注明出处。
评论(没有评论)