http://blog.csdn.net/javastar...
https://www.cnblogs.com/fanwe...
看这些文章,对一同mysql数据库的同一表进行大量数据插入
多线程插入比单线程插入快
我的感觉是,线程对同一个表的写,应该是独占的吧
否则如何检查唯一索引
自增长 id的情况下mysql如何确定主键id?
假如独占
为何多线程插入比单线程插入快?
http://blog.csdn.net/javastar...
https://www.cnblogs.com/fanwe...
看这些文章,对一同mysql数据库的同一表进行大量数据插入
多线程插入比单线程插入快
我的感觉是,线程对同一个表的写,应该是独占的吧
否则如何检查唯一索引
自增长 id的情况下mysql如何确定主键id?
假如独占
为何多线程插入比单线程插入快?
我的理解是,mysql插入数据在写阶段是独占的,但是插入一条数据仍然需要解析、计算、最后才进行写处理,比如要给每一条记录分配自增id,校验主键唯一键属性,或者其他一些逻辑处理,都是需要计算的,而多线程是利用了多cpu同时计算解析的能力,所以对mysql表来说,只有在最后的写阶段才是独占的,这就节省了大部分时间了
批量插入是个IO密集型的操作,这种类型的一般用多线程都能提升一定的效率,因为a线程插入阻塞的时候,b线程就可以准备数据发起插入请求了,b阻塞的时候,c又可以准备发起请求......
这样流水线操作肯定比一个线程操作快一些啊。
想象一下一个屋子有容纳一个人的进口和出口,有一定量的东西需要从屋外搬到屋内,一个人从入口搬进去再从出口出来这样循环往复快呢?还是一群人排着队流水线搬循环往复快?
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
5 回答1.4k 阅读
线程这个用词用在这里可能会产生一些歧义。官方的说法是:操作(operations)。也就是说把【多次的单一词条插入操作】整合成为【一次的多词条插入操作】这个是提高Insert速度的基础。原因很简单,在数据里做插入操作的时候,整体时间的分配是这样的:
上面的百分比是官方给出的近似比例。从这里可以看出来,真正耗时的不是操作,而是链接,解析的过程,这也就是为什么【多次的单一词条插入操作】的耗时要比 【一次的多词条插入操作】高的根本原因。
官方链接