3

处理需要从数据库传输大量数据的应用程序。它包括 SELECT 和 UPDATE 查询(即读取和写入数据库)。

首先,我需要获取所有产品的列表(大约 1000 个 SKU)。SELECT 查询非常简单:

SELECT
    *
FROM
    `my_db`.`products`

然后对每个产品进行一些自动更新。UPDATE 查询是这样的:

UPDATE
    `my_db`.`products`
SET
    `updated` = NOW(),
    `mods` = `mods` + 1,
    /* a couple more updated fields here, if needed */

现在的问题是哪一个会更快/更好地执行:一次操作所有记录的单个查询,还是单独处理每个产品的 PHP 循环(例如foreachor while)(1000 个单行查询)?后者当然需要WHERE model = 'ABC'and LIMIT 1

为了使问题更复杂(和全面),请考虑其他影响标准,例如:

  • 如果目标行数不同:100 或 100,000 行会怎样?
  • 如果涉及多张桌子怎么办?请参阅下面的 JOINed 查询示例。

.

SELECT
    *
FROM
    `my_db`.`table1` AS `t1`
    INNER JOIN `my_db`.`table2` AS `t2` ON `t1`.`id` = `t2`.`fk`
    INNER JOIN `my_db`.`table3` AS `t3` ON `t2`.`id` = `t3`.`fk`
    /* Etc. */

是否有一般的“经验法则”来决定在这种或那种情况下哪种方式更好?

4

1 回答 1

2

只要你的 sql 语句写得好,一条包含 1000 条记录的好语句总是比执行 1000 条查询更有效率。

于 2012-12-06T15:55:28.320 回答