我看到到处程序员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限制)会太小。 –