更新大型MySQL表

时间:2015-04-21 10:23:26

标签: php mysql sql laravel-4

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

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

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

更新

我正在使用如下的Laravel模型

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

$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)');

此查询将尝试INSERT product_idproduct_quantity进入products表。由于product_id已经存在,查询会更改为UPDATE,我们会将我们想要的列product_quantity映射为。

答案 2 :(得分:0)

最好和最快的方法是以这种方式在数据库管理界面(如phpmyadmin)中使用单行更新命令:

UPDATE product SET ...

之前我已将它用于100万条记录,并在大约10秒后得到结果。