加速MySql插入过程

时间:2017-03-21 07:11:34

标签: php mysql

我有一个DB表,它有大约40列,主要动机是尽快将记录插入数据库。我正在使用PHP。

问题是,要创建insert语句,我必须循环遍历每个。我不确定我是否正确地做了这件事。请建议我最好的atlernative ..这是例子..

/// to loop through the available data ///

$sqc = "";
for ($i=1; $i<=100; $i++){
  if ($sqc == ""){
     $sqc = "('".$array_value["col1"]."'.. till .. '".$array_value["col40"]."',)";
  } else {
     $sqc .= ",('".$array_value["col1"]."'.. till .. '".$array_value["col40"]."',)";
  }
}

/// finally the sql query ///

$sql_quyery = "INSERT INTO  table_name (`col1`,.. till.. ,`col40`) values ".$sqc;

$ sqc的这种串联需要花费很多时间。还有DB中的插入,还有另一种方法可以做到这一点..我需要找到一种方法来加快速度,如100X .. :(

谢谢

2 个答案:

答案 0 :(得分:1)

正如MySQL Optimizing INSERT Statements页面上所建议的那样,有一些方法 -

  • 如果要同时从同一客户端插入多行,请使用带有多个VALUES列表的INSERT语句一次插入多行。与使用单独的单行INSERT语句相比,这要快得多(在某些情况下要快很多倍)。如果要将数据添加到非空表中,则可以调整 bulk_insert_buffer_size 变量以使数据插入更快。

  • 从文本文件加载表格时,请使用 LOAD DATA INFILE 。这通常比使用 INSERT 语句快<20> 。

找到以下链接 - [MySQL指南] [1] https://dev.mysql.com/doc/refman/5.7/en/insert-optimization.html

答案 1 :(得分:0)

只是一个小小的贡献,但你可以使用绑定来避免concat

$stmt = mysqli_prepare($yuor_conn, 
        "INSERT INTO  table_name (`col1`,.. till.. ,`col40`) VALUES (?, ... till..  ?)");

mysqli_stmt_bind_param($stmt, 'ss.......s',
       $array_value["col1"], $array_value["col2"], .. till.., 
                  $array_value["col40"]);