我看到到處程序員discuting的最快LOAD DATA INFILE
插入優化。但他們從來沒有解釋過很多他們的價值選擇等,優化取決於環境和實際的實際需求。MySQL的優化LOAD DATA INFILE
所以,想上什麼是在達到最快的插入可能我的MySQL配置文件的最佳值的一些解釋相關,請。
我的配置,英特爾雙核@ 3.30 GHz的,4GB DDR4 RAM(Windows7的說: 「2.16Gb可用」 壽由於保留內存)。
我backup.csv文件明文約5億的條目,所以它的一個巨大的500GB文件大小這樣舍姆(但十六進制字符串,長度64):
"sdlfkjdlfkjslfjsdlfkjslrtrtykdjf";"dlksfjdrtyrylkfjlskjfssdlkfjslsdkjf"
在我的表,唯一的兩個字段第一個是Unique索引。 行格式設置爲固定節省空間的問題。出於同樣的原因,字段類型被設置爲BINARY(32)。
即時通訊使用MyISAM引擎。 (!因爲InnoDB需要更多的空間)(MySQL版本5.1.41)
這裏是我計劃用現在的代碼:
ALTER TABLE verification DISABLE KEYS;
LOCK TABLES verification WRITE;
LOAD DATA INFILE 'G:\\backup.csv'
IGNORE INTO TABLE verification
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
(@myhash, @myverif) SET hash = UNHEX(@myhash), verif = UNHEX(@myverif);
UNLOCK TABLES;
ALTER TABLE verification ENABLE KEYS;
正如你所看到的,命令使用LOAD DATA INFILE
採用純文本值,並將其轉化爲HEX(均爲十六進制哈希finaly所以......)
我聽說緩衝區大小等,並從MySQL配置文件中的所有這些值。我應該改變什麼,請問最好的價值是什麼?正如你所看到的,我鎖定了桌子,並且還禁用了鍵以加快速度。
我也閱讀文檔:
myisamchk --keys-used=0 -rq /var/lib/mysql/dbName/tblName
在這之前插入會加速它也。但是什麼是真的tblName
? (?因爲我有一個.frm文件,一個.MYD和.MYI,所以我應該指向哪一個)
Here are the lasts short hints i did read about optimisation
編輯:忘了告訴,一切都爲localhost。
我絕對沒有所謂的文件'verification',我將嘗試也無妨,可能myisamchk的' '一個人在做這項工作。數據是十六進制字符串是的,長度爲64(所以BINARY(32);我忘了在我的問題上提到這一點)。我的版本是'mysql.exe Ver 14.14 Distrib 5.1.41,對於Win32(ia32)' – user3916429
哦,對於'myisam_data_pointer_size',默認爲'6',所以它的好處,因爲'5'只有五十億。有一個500Gb數據庫,我不會爭取5Gb的誠實=),似乎我沒有'myisam_index_pointer_size'註冊。 – user3916429
你可能有3個文件'verification.MYD'等。大約64/32。 5.1變得古色古香;考慮儘快升級。 「6」(默認值,256TB限制)和「5」(1TB限制)是文件中「數據指針」中_bytes_的數量。 '4'(4GB限制)會太小。 –