处理需要从数据库传输大量数据的应用程序。它包括 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 循环(例如foreach
or 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. */
是否有一般的“经验法则”来决定在这种或那种情况下哪种方式更好?