第一步:配置my.ini文件
文件中配置
bulk_insert_buffer_size=120M 或者更大
將insert語句的長度設爲最大。
Max_allowed_packet=1M
Net_buffer_length=8k
保存
第二步:查看設置的參選有沒有生效.
Mysql > SHOW VARIABLES;
bulk_insert_buffer_size默認是8M,我們要把它調成100M或百兆以上,也不要太大。下面看調整個好的,如下圖:
第三步:完成設置後,批量插入數據時使用多條模式。
INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',"b","c"),('a',"b","c");
將以上Mysql插入模式用php語言字符串拼接SQL方法如下,你也可轉換Java,Python,Golang其它你用的最順手的語言,將方法轉換分享吧:
/**
* 多條數據同時轉化成插入SQL語句
* @ CreatBy:IT自由職業者
* @param string $table 表名
* @$arr_key是表字段名的key:$arr_key=array("field1","field2","field3")
* @param array $arr是字段值 數組示例 arrat(("a","b","c"), ("bbc","bbb","caaa"),('add',"bppp","cggg"))
* @return string
*/
function multArray2Insert($table,$arr_key, $arr, $split = '`') {
$arrValues = array();
if (empty($table) || !is_array($arr_key) || !is_array($arr)) {
return false;
}
$sql = "INSERT INTO %s( %s ) values %s ";
foreach ($arr as $k => $v) {
$arrValues[$k] = "'".implode("','",array_values($v))."'";
}
$sql = sprintf($sql, $table, "{$split}" . implode("{$split} ,{$split}", $arr_key) . "{$split}", "(" . implode(") , (", array_values($arrValues)) . ")");
return $sql;
}
以上方法調試過無誤的,頭條沒有代碼格式編輯器,所以發代碼圖。這段代碼的返回字符串結果是INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',"b","c"),('a',"b","c") ,做試驗時用的普通配置的電腦是每秒1000條批量插入速度,千萬條數據寫的速度也非常快,新版本PHP語言數據處理能力很強大。如果你的電腦或服務器性能高,你可以調節$arr數組決定你插入多少條數據,靈活使用吧。