Php 更新大型MySQL表

Php 更新大型MySQL表,php,mysql,sql,laravel-4,Php,Mysql,Sql,Laravel 4,我的MySQL数据库中有一个包含10000个产品的表。我想以最快的方式更新所有记录。我正在使用Laravel和MySQL 为了更好的解决方案,我还可以改变技术。现在更新整个表几乎需要半个小时 我想以最快的方式更新该表。我该怎么办 更新 我使用的是如下所示的Laravel模型 DB::table('products')->where('product_id',$product_id)->limit(1)->update(array('prodcut_quantity' =>

我的MySQL数据库中有一个包含10000个产品的表。我想以最快的方式更新所有记录。我正在使用Laravel和MySQL

为了更好的解决方案,我还可以改变技术。现在更新整个表几乎需要半个小时

我想以最快的方式更新该表。我该怎么办

更新

我使用的是如下所示的Laravel模型

DB::table('products')->where('product_id',$product_id)->limit(1)->update(array('prodcut_quantity' => $prodcut_quantity));

最好、最快的方法是在数据库管理界面(如phpmyadmin)内使用单行更新命令

UPDATE product SET ...

我以前使用过它100万条记录,大约10秒后得到结果。

性能更多地受到表设计的影响,而不是针对它运行的语句的影响。确保您的表已正确索引,并且使用了高效的存储引擎,并确保数据已正常化。如注释中所述,请确保使用单个更新查询,而不是多个更新查询(或者至少使用尽可能少的语句)。如果您正在寻找代码优化,那么您需要发布一些供我们使用的内容。如果您可以发布表设计、索引和存储引擎的详细信息,这也将是一个帮助。

我将创建一个循环,将主键和产品数量添加到数组中,然后执行
DB::insert
并在重复更新时输入
insert
查询(如下所示)将值替换为数组中的值:

$array = array(
    '1,1', //product_id,product_quantity
    '2,2',
    '4,12',
);

DB::insert('INSERT INTO products (product_id,product_quantity) VALUES (' . implode('),(', $array) . ') ON DUPLICATE KEY UPDATE product_quantity=VALUES(product_quantity)');

此查询将尝试
产品id
产品数量
插入
产品
表。由于
product\u id
已经存在,查询将更改为
UPDATE
,我们将映射我们希望列
product\u quantity
的内容。

在一条语句中全部更新它们吗?如果你一次只做一个更新,这将需要血腥的foreveer。你使用的更新命令是什么?请告诉我们你使用的代码,以便我们提供帮助。@RichardParnaby King,我提供了一些代码。你的罪魁祸首不是php,也不是laravel。这是您的方法和MySQL配置。当一个数据库执行工作很慢时,通常是数据库的错误。db出现故障的原因是它必须不断地写入,而您强迫它一次写入一条记录。一次更新将花费1次I/O操作-每秒大约有150-200次这样的操作,因此对于10k记录,这将需要一段时间。解决方案包括:更快的硬盘,将那些愚蠢的更新打包到一个大事务中,或者简单地创建一个大的更新声明(或者几个小的更新,一次更新多个产品),谢谢@hamed的回复。您正在谈论使用循环构造一个更新SQL查询,然后执行该查询吗?不客气。不,不需要使用循环。您可以在数据库管理界面(不在项目内部)中仅使用一个查询更新表。尽管是选定的答案,但这种方法并不是使用Laravel(或其他任何工具)执行更新的最快方法。任何来自谷歌并得出这个答案的人都应该记住这一点。它也是一个完全的反模式,只是毫无理由地增加了开销,执行简单的更新并将多个更新打包到单个事务中以使其更快并没有什么错(因为这就是我们加快速度的方法——我们使用一个输入输出操作将大量数据写入磁盘,这就是为什么HDD以bandwith measurement而自豪的原因)。谢谢@N.B.的回复。您能告诉我们更快的方法吗?如果我没弄错的话,有两个答案可以告诉您如何更快地完成。另外,还有一些评论可以告诉您如何更快地完成。如果您正在寻找可以使用的复制/粘贴解决方案,恐怕您将得不到。谢谢@N.B.的快速响应。现在我在考虑缓存。谢谢