有谁知道什么会更有效并使用更少的资源:
方法 1 -- 使用单个 SELECT 语句从一个表中获取数据,然后遍历它以在另一个表上执行多个 UPDATE。EG(伪代码,execute() 运行查询):
Query1_resultset = execute("SELECT item_id, sum(views) as view_count FROM tableA WHERE condition=1");
while(Query1_resultset as row) {
execute("UPDATE tableB SET view_count=row.view_count WHERE id=row.item_id");
}
方法 2 -- 使用单个 INSERT.. ON DUPLICATE KEY UPDATE 语句和嵌套的 SELECT 语句。例如:
INSERT INTO tableB (id, view_count) SELECT item_id, SUM(views) as view_count FROM tableA WHERE condition=1 ON DUPLICATE KEY UPDATE view_count=VALUES(view_count);
注意:tableB 上的 ID 是主键。实际上不会有任何 INSERTS 因为我知道密钥会存在。所以这都是更新。只需使用此语句传入单个查询而不是多个。
我真的很好奇为什么两者都会更有效率。是查询的数量决定了它的运行速度吗?瓶颈在哪里?我正在寻找可以扩展的东西(更新的行数每天都在增长)。
有任何想法吗?
谢谢