Mysql批量插入千萬級別數據的配置和使用方式

第一步:配置my.ini文件

文件中配置

bulk_insert_buffer_size=120M 或者更大

將insert語句的長度設爲最大。

Max_allowed_packet=1M

Net_buffer_length=8k

保存

第二步:查看設置的參選有沒有生效.

Mysql > SHOW VARIABLES;

Mysql千萬級別數據批量插入只需簡單三步

bulk_insert_buffer_size默認是8M,我們要把它調成100M或百兆以上,也不要太大。下面看調整個好的,如下圖:

Mysql千萬級別數據批量插入只需簡單三步

第三步:完成設置後,批量插入數據時使用多條模式。

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;

}

Mysql千萬級別數據批量插入只需簡單三步

以上方法調試過無誤的,頭條沒有代碼格式編輯器,所以發代碼圖。這段代碼的返回字符串結果是INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',"b","c"),('a',"b","c") ,做試驗時用的普通配置的電腦是每秒1000條批量插入速度,千萬條數據寫的速度也非常快,新版本PHP語言數據處理能力很強大。如果你的電腦或服務器性能高,你可以調節$arr數組決定你插入多少條數據,靈活使用吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章