MySQL基准测试:1个查询返回1000行VS 1000个单行查询

时间:2012-12-06 15:38:02

标签: php mysql benchmarking microbenchmark

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

首先,我需要获得所有产品的清单(大约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循环(例如foreachwhile)每个产品分开(1000个单行查询)?当然,后者需要WHERE model = 'ABC'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. */

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

1 个答案:

答案 0 :(得分:2)

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