我可以在MySQL中结合两个更新查询来使其更快吗?

时间:2019-05-07 17:36:40

标签: mysql sql

现在我正在使用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语句,而我的则需要使用不同的:/

这是我的两个问题:

  1. 如何将它们组合成一个查询?
  2. 最重要的是,将其作为单个查询而不是两个单独的查询运行会更快吗?

1 个答案:

答案 0 :(得分:0)

您可以使用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'

这是否比执行它们更好,因为很难预测两个查询,因为这取决于许多因素,例如客户端和数据库服务器之间的连接延迟。如果他们在同一台机器上,我怀疑不是。您应该对这两种方法进行基准测试,以确定哪种方法最适合您。

如果要进行许多此类查询,则只需准备一次查询,然后使用不同的参数执行这些查询,就可以提高性能,因为只需要在准备查询时对其进行分析即可。