我是MySQL新手,我正在寻找这个问题的一些指导
我将大量数据输入MySQL表
我已使用此格式进行设置,因此VALUES
处于循环中且INSERT
部分仅发生一次:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
我已阅读过帖子:How to do a batch insert in MySQL
我正在尝试插入多达160,000行数据。 我的php脚本似乎在短时间内卡住了,只有6499行数据被插入到表中。
我认为我遇到Max_Allowed_Packet
我正在使用iPage托管,我在共享服务器上。我已经向iPage询问了Max_Allowed_Packet
,但我告诉过,只有在虚拟专用服务器(VPS)上才能增加。{此项目不值得为私人服务器付费。
我正在寻找在共享服务器上插入所有这些数据的编码方式
一次提交1000行选项吗?
我不确定这是否是一个好的解决方案,我很感激任何想法。
以下是插入数据的代码部分:
// prepare first part of the query (before values)
$query = " INSERT INTO `Events_testing2` (
`eventID`,
`location`,
`date`,
`barcode`,
`runner`,
`time`,
`Run Points`,
`Volunteer Points`,
`Gender`,
`Gender pos`
) VALUES ";
//loop the runner array
for($x=0;$x<count($array_runner); $x++){
$query_values[] = "(' ','$location','$date','$array_barcode[$x]','$array_runner[$x]','$array_time[$x]','$array_score[$x]','','$array_gender[$x]','$array_gender_pos[$x]')";
}
// put the code together to insert to the DB
$queryInsertUser=mysqli_query($link,$query.implode(',',$query_values));
答案 0 :(得分:0)
根据评论,如果您要使用预准备语句,则在尝试插入数千条记录时可能会发现性能差异。希望以下内容能够说明如何实现这一目标 - 尽管它当然未经测试。
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'xxx';
$db = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );
$sql='insert into `Events_testing2` (
`eventID`,
`location`,
`date`,
`barcode`,
`runner`,
`time`,
`Run Points`,
`Volunteer Points`,
`Gender`,
`Gender pos`
) values (?,?,?,?,?,?,?,?,?,?)';
$stmt=$db->prepare( $sql );
if( $stmt ){
$stmt->bind_param('isssssiiss',$id,$location,$date,$barcode,$runner,$time,$runpoints,$volpoints,$gender,$genpos);
/*
$location & $date seem to be defined already
*/
for( $x=0; $x < count( $array_runner ); $x++ ){
$id=null;
$barcode=$array_barcode[$x];
$runner=$array_runner[$x];
$time=$array_time[$x];
$runpoints=$array_score[$x];
$volpoints=null;
$gender=$array_gender[$x];
$genpos=$array_gender_pos[$x];
$stmt->execute();
}
$stmt->close();
$db->close();
}
?>