现在我正在使用 PHP 运行这两个查询:
UPDATE members SET balance = balance - $cost WHERE id = '$member'");
UPDATE campaigns SET h_hits = h_hits + 1,
d_hits = d_hits + 1,
traffic = traffic + 1,
spent = spent + $cost,
timestamp = CURRENT_TIMESTAMP
WHERE id = '$row_id'
我看到了一些有关运行多个更新的问题,但大多数问题似乎共享相同的 WHERE
语句,而我的需要使用不同的语句:/
这是我的两个问题:
- 如何将这些合并到一个查询中?
- 最重要的是,将其作为单个查询运行而不是作为两个单独的查询运行会更快吗?
最佳答案
您可以使用CROSS JOIN
组合它们,这不需要两个表中的行之间有任何关系。您可以在 WHERE
子句中指定每个表的条件。
UPDATE members AS m
CROSS JOIN campaigns AS c
SET m.balance = m.balance - $cost,
c.h_hits = c.h_hits + 1,
c.d_hits = c.d_hits + 1,
c.traffic = c.traffic + 1,
c.spent = c.spent + $cost,
timestamp = CURRENT_TIMESTAMP
WHERE c.id = '$member'
AND m.id = '$row_id'
这是否比执行两个查询更好很难预测,因为这取决于许多因素,例如客户端和数据库服务器之间的连接延迟。如果它们在同一台机器上,我怀疑不会。您应该对这两种方法进行基准测试,以确定哪种方法最适合您的情况。
如果您要进行许多这样的查询,那么准备一次查询,然后使用不同的参数执行它们应该可以提高性能,因为查询只需要在准备时进行解析。
关于mysql - 我可以在 MySQL 中组合两个更新查询以使其更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56027845/