我有一个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 .. :(
谢谢
答案 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"]);