Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL插入和更新优化_Php_Mysql_Optimization - Fatal编程技术网

Php MySQL插入和更新优化

Php MySQL插入和更新优化,php,mysql,optimization,Php,Mysql,Optimization,我想修改一个cron脚本,它包括3个表插入、一个表更新和一个删除过程。 有数千条记录,因此插入数据需要很多时间 数据插入到产品表、产品付款表、产品明细表和产品图像表中 当前脚本检查产品是否存在。 如果不存在,则首先将数据插入products表并返回新插入的产品id。然后,插入到其他三个表中。可能会多次插入图像表(取决于图像的数量) 如果产品已存在,请更新表。对于images表,脚本删除该特定产品的现有图像记录,然后将所有图像作为新图像插入images表 这就是现在发生的事情: if(!$prod

我想修改一个cron脚本,它包括3个表插入、一个表更新和一个删除过程。 有数千条记录,因此插入数据需要很多时间

数据插入到产品表、产品付款表、产品明细表和产品图像表中

当前脚本检查产品是否存在。 如果不存在,则首先将数据插入products表并返回新插入的产品id。然后,插入到其他三个表中。可能会多次插入图像表(取决于图像的数量)

如果产品已存在,请更新表。对于images表,脚本删除该特定产品的现有图像记录,然后将所有图像作为新图像插入images表

这就是现在发生的事情:

if(!$prod_exists){
  $product_id = insert_product($product_data) ;
  if($product_id){
    insert_payment($paymnt_data, $product_id);
    insert_details($details_data, $product_id);
    insert_images($image_data, $product_id); 
  }
}else{
   update_product($product_data, $product_id)
   update_payment($paymnt_data, $product_id);
   update_details($details_data, $product_id);
   delete_images($product_id);
   insert_images($image_data, $product_id); 
}
由于数据量巨大,执行时间较长。我们有没有办法优化整个过程

谢谢 M

您可以使用
REPLACE-INTO
sql查询插入行或一次性替换值

看看这篇文章:

假设MySQL:

准备好的声明

如果你在谈论成千上万的查询,这将极大地帮助你解决速度问题

另外,如果您在InnoDB上(您应该是这样!),则在事务中至少包装每个查询块:


这无助于提高速度,但会使整个操作更加安全。

另一种处理需要添加/更新的大量数据的方法是创建一个临时表(可能是使用ENGINE=MEMORY)并在该表中进行批量插入。因此,与其一次添加一个数据集,不如创建包含多个数据集的sql插入,然后一次添加它们。 这比在元素上循环并为每个数据集调用insert要快得多

在这之后,您可以通过将原始表与临时表连接起来进行大规模更新,因为这也要快得多


我们正利用这一概念加快插入/更新的速度。

Replace将删除并重新插入重复的键控记录,这可能会导致通过id引用这些记录的任何其他表出现重大问题。根据所做的更改,您很可能可以通过执行INSERT INTO…..来摆脱困境。。。。。关于重复密钥更新处理。这样,如果记录是新的,则可以插入记录,如果不是,则可以更新记录。这一点最大的优点是,通过插入,您可以在一条SQL语句中处理数百条记录,这可以大大减少所需语句的数量。