鍍金池/ 問答/數(shù)據(jù)庫/ Mysql:對同一表進行大量數(shù)據(jù)插入,為何多線程插入比單線程插入快?

Mysql:對同一表進行大量數(shù)據(jù)插入,為何多線程插入比單線程插入快?

http://blog.csdn.net/javastar...
https://www.cnblogs.com/fanwe...

看這些文章,對一同mysql數(shù)據(jù)庫的同一表進行大量數(shù)據(jù)插入
多線程插入比單線程插入快

我的感覺是,線程對同一個表的寫,應該是獨占的吧
否則如何檢查唯一索引
自增長 id的情況下mysql如何確定主鍵id?

假如獨占
為何多線程插入比單線程插入快?

回答
編輯回答
情已空

多線程只是針對CPU來說的吧,真正的IO還是一樣順序?qū)懭氲?,不可能并發(fā)。

2017年1月30日 17:26
編輯回答
糖豆豆

我的理解是,mysql插入數(shù)據(jù)在寫階段是獨占的,但是插入一條數(shù)據(jù)仍然需要解析、計算、最后才進行寫處理,比如要給每一條記錄分配自增id,校驗主鍵唯一鍵屬性,或者其他一些邏輯處理,都是需要計算的,而多線程是利用了多cpu同時計算解析的能力,所以對mysql表來說,只有在最后的寫階段才是獨占的,這就節(jié)省了大部分時間了

2017年5月1日 06:55
編輯回答
九年囚

批量插入是個IO密集型的操作,這種類型的一般用多線程都能提升一定的效率,因為a線程插入阻塞的時候,b線程就可以準備數(shù)據(jù)發(fā)起插入請求了,b阻塞的時候,c又可以準備發(fā)起請求......
這樣流水線操作肯定比一個線程操作快一些啊。
想象一下一個屋子有容納一個人的進口和出口,有一定量的東西需要從屋外搬到屋內(nèi),一個人從入口搬進去再從出口出來這樣循環(huán)往復快呢?還是一群人排著隊流水線搬循環(huán)往復快?

2017年9月27日 23:52
編輯回答
笨小蛋

線程這個用詞用在這里可能會產(chǎn)生一些歧義。官方的說法是:操作(operations)。也就是說把【多次的單一詞條插入操作】整合成為【一次的多詞條插入操作】這個是提高Insert速度的基礎。原因很簡單,在數(shù)據(jù)里做插入操作的時候,整體時間的分配是這樣的:

  1. 鏈接耗時 (30%)
  2. 發(fā)送query到服務器 (20%)
  3. 解析query (20%)
  4. 插入操作 (10% * 詞條數(shù)目)
  5. 插入index (10% * Index的數(shù)目)
  6. 關閉鏈接 (10%)

上面的百分比是官方給出的近似比例。從這里可以看出來,真正耗時的不是操作,而是鏈接,解析的過程,這也就是為什么【多次的單一詞條插入操作】的耗時要比 【一次的多詞條插入操作】高的根本原因。

官方鏈接

2018年9月6日 20:56
編輯回答
拼未來

這是一個好問題,同問

2017年4月24日 19:45