我使用嵌套的Foreach循环将数据存储在mysql中。但它花费了太多的处理时间。我怎样才能减少最长的执行时间。
foreach ($results as $r) {
mysqli_query($con,"insert into commercial values('".mysqli_real_escape_string($con,$r['MST_MLS_NUMBER'])."')");
$val=1;
$objects = $rets->GetObject('Property', 'Photo', $r['MST_MLS_NUMBER'], '*', 0);
foreach ($objects as $pho) {
mysqli_query($con,"insert into cmtval values('".mysqli_real_escape_string($con,$r['MST_MLS_NUMBER'])."')");
}
}
答案 0 :(得分:0)
您应该使用bulk insert
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
通过foreach循环,您应首先执行查询,然后使用mysqli_query
执行查询。
$query1 = "insert into commercial values ";
$query2 = "insert into cmtval values ";
foreach ($results as $r)
{
$query1 .= "('" . mysqli_real_escape_string( $con, $r['MST_MLS_NUMBER']) . "'), ";
$val=1;
$objects = $rets->GetObject('Property', 'Photo', $r['MST_MLS_NUMBER'], '*', 0);
foreach ($objects as $pho)
{
$query2 .= "('" . mysqli_real_escape_string( $con, $r['MST_MLS_NUMBER']) . "'), ";
}
}
mysqli_query($con, $query1);
mysqli_query($con, $query2);
我还没有测试过代码。测试并告诉我是否遗漏了任何东西。 批量更新会缩短一些时间。
此外,如果您在单个查询中在DB中保存过多数据,并且如果索引太多,则插入数据需要时间。
答案 1 :(得分:0)
你可以做这样的事情
foreach ($results as $r)
{
mysqli_query($con,"insert into commercial values('".mysqli_real_escape_string($con,$r['MST_MLS_NUMBER'])."')");
$val=1;
$objects = $rets->GetObject('Property', 'Photo', $r['MST_MLS_NUMBER'], '*', 0);
// generate partial query strings for insert multiple records
$numbers=array();
foreach ($objects as $pho)
{
$numbers[]= "('".mysqli_real_escape_string($con,$pho['MST_MLS_NUMBER'])."')";
}
mysqli_query($con,"insert into cmtval values".implode(",",$numbers)); // it will insert multiple record
}
答案 2 :(得分:0)
您可以使用prepare语句并执行不同的值来插入
例如
// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
设置参数和执行行应该在你的foreach循环中。
准备好的语句和绑定参数 预准备语句是用于以高效率重复执行相同(或类似)SQL语句的功能。
准备好的陈述基本上是这样的:
准备:创建一个SQL语句模板并发送给 数据库。某些值未指定,称为参数 (标有"?")。示例:INSERT INTO MyGuests VALUES(?,?,?) 数据库在SQL上解析,编译和执行查询优化 语句模板,并存储结果而不执行它 执行:稍后,应用程序将值绑定到 参数,数据库执行语句。应用程序 可以根据需要多次执行语句 值