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