千万级数据库入库测试。
1 header("content-type:text/html; charset=utf-8"); 2 $path = dirname(realpath(__FILE__)); 3 $fw = fopen($path . "/md5.sql", "w"); 4 for($i=0; $i<100000000; $i++){ 5 $md5 = md5($i); 6 $sha1 = sha1($i); 7 $str = ''; 8 if($i % 2000 == 0){ 9 if($i !== 0)$str = ';'.chr(10); 10 $str .= 'INSERT INTO `npd`(`m`,`s1`) VALUES(\''.$md5.'\',\''.$sha1.'\')'; 11 } 12 else{ 13 $str .= ',(\''.$md5.'\',\''.$sha1.'\')'; 14 } 15 fwrite($fw, $str); 16 if($i % 100000 == 0) echo $i.chr(10); 17 } 18 fwrite($fw, ';'.chr(10)); 19 fclose($fw); 20 echo "create insert sql success\n"; exit;
采用命令行模式,一亿条数据文件生成很快,大概耗时20分钟,将近7.5G大小。 导入mysql数据库,库表无索引,大概两个小时还不到。 单条数据查询,耗时2-3分钟。 执行select count(*) from npd; 数据库直接卡死。 如果库表先建立好索引,再导数据,则随着时间的增加,数据入库越来越慢。 到了八百万数据不到样子,两千条数据入库好几分钟。而且此时的数据索引文件有1G多。