mysql快速插入百萬條數(shù)據(jù)

前言

假設(shè)現(xiàn)在我們要向mysql插入500萬條數(shù)據(jù),如何實(shí)現(xiàn)高效快速的插入進(jìn)去叶骨?暫時不考慮數(shù)據(jù)的獲取茫多、網(wǎng)絡(luò)I/O、以及是否跨機(jī)操作忽刽,本文將在本地進(jìn)行數(shù)據(jù)的插入天揖,單純從mysql入手,把優(yōu)化到底跪帝。

1.生成sql文件

首先我們來生成500萬條inster的sql文件今膊,圖1為生成sql文件的程序,運(yùn)行大概需要25s左右伞剑,采用Python3實(shí)現(xiàn)斑唬,生成的文件如圖2。

圖1
圖2

2.進(jìn)行sql插入

這里我寫了個簡單的sh,進(jìn)行mysql的導(dǎo)入,請看圖3恕刘,我里面的密碼用的環(huán)境變量缤谎,大家寫的時候?qū)懽约旱拿艽a就行,經(jīng)過了漫長的運(yùn)行褐着,才插入完成弓千,請看圖4,讓人吐血的運(yùn)行時間献起。

圖3
圖4

看到圖4洋访,運(yùn)行了兩個多小時,才插入了500萬條數(shù)據(jù)??????谴餐,顯然是不能接受的姻政,如果我要插入三五千萬條數(shù)據(jù)豈非要睡上好幾覺了。優(yōu)化必須走起來.....

500萬條數(shù)據(jù)岂嗓,頻繁的磁盤I/O操作汁展,插入效率緩如蝸牛。我們來試試批量插入厌殉,先來減少磁盤I/O操作食绿。

3.生成批量插入sql文件(Python3)

在這里,我的批量插入式一次性插入1000條數(shù)據(jù)公罕,inster進(jìn)行5000次就行器紧,相當(dāng)于5000次I/O操作,比第一次的操作數(shù) 楼眷,大大降低铲汪,來看圖5-6,為生成的文件罐柳。

圖5
圖6

4.批量sql插入

為保證盡可能的準(zhǔn)確性掌腰,兩次插入的表結(jié)構(gòu),類型及內(nèi)容都一致张吉。

圖7

看到圖7的運(yùn)行時間齿梁,才花了41秒,就插入了500萬條數(shù)據(jù)肮蛹,性能提升了近200倍左右勺择,性能達(dá)到了量級提升。優(yōu)化繼續(xù)在路上.....

之前看到mysql的引擎對比蔗崎,說在頻繁批量插入時酵幕,MyIASM引擎比InnoDB引擎性能更好。我們來試試看??????.....

5.更換引擎

圖8

看到圖8缓苛,我這邊默認(rèn)的引擎還是InnoDB芳撒。

如圖9邓深,我們執(zhí)行命令:alter table batch_jq engine=MYISAM;進(jìn)行更改引擎。(小知識點(diǎn):mysql終端想清屏笔刹,可以使用system clear命令)

圖9
圖10

如圖10芥备,更改引擎后,只用了25秒就插入了500萬條數(shù)據(jù)舌菜,性能又有了一個新的提升萌壳。我們在數(shù)據(jù)插入完成后,再將引擎更改回InnoDB即可日月。

優(yōu)化在路上....

之后會出一篇針對海量數(shù)據(jù)的sql優(yōu)化袱瓮,準(zhǔn)備階段,敬請期待0А3呓琛!

擴(kuò)展:

(1)如若插入海量數(shù)據(jù)精拟,建議可以先不考慮建立索引燎斩,因為索引也是需要維護(hù)的,會降低插入性能蜂绎,可以等插入完成后栅表,再去建立索引。如若是MyISAM师枣,可以忽略怪瓶,因其延遲更新索引的特性,可以使插入性能大大提升(上述例子兩個表坛吁,均未建立索引)劳殖。

(2)MySQL為了保證ACID中的一致性和持久性,使用了WAL拨脉。

Redo log就是一種WAL的應(yīng)用。當(dāng)數(shù)據(jù)庫忽然掉電宣增,再重新啟動時玫膀,MySQL可以通過Redo log還原數(shù)據(jù)。也就是說爹脾,每次事務(wù)提交時帖旨,不用同步刷新磁盤數(shù)據(jù)文件,只需要同步刷新Redo log就足夠了灵妨。相比寫數(shù)據(jù)文件時的隨機(jī)IO解阅,寫Redo log時的順序IO能夠提高事務(wù)提交速度。

在沒有開啟binlog時泌霍,Redo log的刷盤操作將會是最終影響MySQL TPS的瓶頸所在货抄。為了緩解這一問題,MySQL使用了組提交,將多個刷盤操作合并成一個蟹地,如果說10個事務(wù)依次排隊刷盤的時間成本是10积暖,那么將這10個事務(wù)一次性一起刷盤的時間成本則近似于1。

有什么問題請留言怪与,大家一起探討學(xué)習(xí)??????夺刑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市分别,隨后出現(xiàn)的幾起案子遍愿,更是在濱河造成了極大的恐慌,老刑警劉巖耘斩,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件错览,死亡現(xiàn)場離奇詭異,居然都是意外死亡煌往,警方通過查閱死者的電腦和手機(jī)倾哺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刽脖,“玉大人羞海,你說我怎么就攤上這事∏埽” “怎么了却邓?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長院水。 經(jīng)常有香客問我腊徙,道長,這世上最難降的妖魔是什么檬某? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任撬腾,我火速辦了婚禮,結(jié)果婚禮上恢恼,老公的妹妹穿的比我還像新娘民傻。我一直安慰自己,他們只是感情好场斑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布漓踢。 她就那樣靜靜地躺著,像睡著了一般漏隐。 火紅的嫁衣襯著肌膚如雪喧半。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天青责,我揣著相機(jī)與錄音挺据,去河邊找鬼取具。 笑死,一個胖子當(dāng)著我的面吹牛吴菠,可吹牛的內(nèi)容都是我干的者填。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼做葵,長吁一口氣:“原來是場噩夢啊……” “哼占哟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酿矢,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榨乎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘫筐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜暑,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年策肝,在試婚紗的時候發(fā)現(xiàn)自己被綠了肛捍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡之众,死狀恐怖拙毫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棺禾,我是刑警寧澤缀蹄,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站膘婶,受9級特大地震影響缺前,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悬襟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一衅码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧古胆,春花似錦肆良、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夭谤。三九已至棺牧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朗儒,已是汗流浹背颊乘。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工参淹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乏悄。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓浙值,卻偏偏與公主長得像,于是被迫代替她去往敵國和親檩小。 傳聞我的和親對象是個殘疾皇子开呐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355