Php Mysql插入和更新Yii框架需要很长时间

Php Mysql插入和更新Yii框架需要很长时间,php,mysql,yii2,Php,Mysql,Yii2,希望插入或更新近10000条记录。插入for循环所需时间太长。尝试使用aternative方式,它只插入值,但在重复的\u键条目上显示错误 $var=0; if($method == 1) { // $sql5 is the current way trying but shows error $sql5='insert into stu_regnum_hall(hall_name,row,column,register_number,subject_code,exam

希望插入或更新近10000条记录。插入for循环所需时间太长。尝试使用aternative方式,它只插入值,但在重复的\u键条目上显示错误

  $var=0;

  if($method == 1)
  {  

// $sql5 is the current way trying but shows error

  $sql5='insert into stu_regnum_hall(hall_name,row,column,register_number,subject_code,exam_date,session,unique_key) values';
for ($i = 0; $i <=$arr_length; $i++)
{
for ($j = 1; $j <= 5; $j++)
{
for($k=0;$k<=4;$k++)
{
if(isset($show[$var+$k]))
{
if($k==0)
{
$hall_name=$arr1[$i];
$row=$j;
}
$column=$k+1;
$reg_num=$show[$var+$k];
$sub_code=$newArr12[$var+$k];
$unique_key=$reg_num.$date.$session;

//current way to insert This is taking too long time to store nearly 10000 records                                                                                

Yii::$app->db->createCommand('insert into stu_regnum_hall(hall_name,row,column,register_number,subject_code,exam_date,session,unique_key) values ("'.$hall_name.'","'.$row.'","'.$column.'","'.$reg_num.'","'.$sub_code.'","'.$date.'","'.$session.'","'.$unique_key.'") ON DUPLICATE KEY UPDATE hall_name ="'.$hall_name.'",row="'.$row.'",column="'.$column.'",register_number="'.$reg_num.'",subject_code="'.$sub_code.'",exam_date="'.$date.'",session="'.$session.'",unique_key="'.$unique_key.'"')->query();                               

//concatenation of $sql5 
$sql5.='("'.$hall_name.'","'.$row.'","'.$column.'","'.$reg_num.'","'.$sub_code.'","'.$date.'","'.$session.'","'.$unique_key.'") ON DUPLICATE KEY UPDATE hall_name= "'.$hall_name.'",row="'.$row.'",column="'.$column.'",register_number="'.$reg_num.'",subject_code="'.$sub_code.'",exam_date="'.$date.'",session="'.$session.'",unique_ key="'.$unique_key.'",';   
   }
else
{
break;
}
}
$var=$var+5;
 }
}

$sql5.='("");';

   // This is the required answer but getting   error                                                                                                      
    Yii::$app->db->createCommand($sql5)->query();
    }
$var=0;
如果($method==1)
{  
//$sql5是当前尝试的方式,但显示错误
$sql5='insert in stu_regnum_hall(hall_name,row,column,register_number,subject_code,test_date,session,unique_key)值';
对于($i=0;$i query();
//$sql5的串联
$sql5.='(“.$hall_name.”,“.$row.”,“.$column.”,“.$reg_num.”,“.$sub_code.”,“.$date.”,“.$session.”,“.$session.”,“.$row.”,“.$column.”,“,';   
}
其他的
{
打破
}
}
$var=$var+5;
}
}
$sql5.='(“”);';
//这是必需的答案,但出现了错误
Yii::$app->db->createCommand($sql5)->query();
}

$sql5查询应该可以在这个

中运行,尝试一下
Yii2 batchInsert
,有一点自定义的用法
INSERT IGNORE
REPLACE
或重复密钥更新时的
。它将插入得非常快

$sql = Yii::$app->db->queryBuilder->batchInsert('your_table_name', ['column1', 'column2','column3',...], $dataArray);
// For IGNORE on Duplicate
//$sql = 'INSERT IGNORE' . mb_substr($sql, strlen('INSERT'));
// For Replace on Duplicate
//$sql = 'REPLACE' . mb_substr($sql, strlen('INSERT'));
// For Update on Duplicate
$sql .= ' ON DUPLICATE KEY UPDATE `column1` = VALUES(`column1`), `column2` = VALUES(`column2`), ...';

Yii::$app->db->createCommand($sql)->execute();

请参阅:

多长时间是多长?10000条记录需要将近5分钟。每次插入查询都在for循环中执行。这就是原因,因为您只是用自动数据填充它,这将是一个作业速度问题,不应该是一个问题。这似乎是一种太低级的方法,而且效率很低,因为有一个新语句对于每一行。别忘了使用它,它将允许您为多行循环查询,并正确地转义。如果您有大量数据要加载,千万不要低估使用CSV源加载数据填充的速度。我只是尝试将insert查询设为公共查询,并将值包含在for循环中。对于ast在添加更新条目后,仅显示错误不应忽略应更新if unique键present@SanthoshPrabu没问题