哪个查询消耗更少的资源更新或 select

which query consumes less resources an update or a select

我需要在 SQL 中的某些情况下进行更新。 它是 table 中单个元素的更新。 这些选项中哪个会消耗更多资源。

  1. 首先询问是否需要通过 select 进行更新,然后进行更新或
  2. 执行查询以便执行更新,尽管在某些情况下它会覆盖相同的值。

你的选项 1 有时间差。 理论上可能 select 没有发现任何问题 - 然后其他人进行更新 - 然后你进行更新并认为它是安全的..

选项2没有这个问题。

还有第三种选择:有选择地进行更新。

例如,假设您想减少余额,但前提是余额大于金额。

您可以创建这样的查询:

UPDATE myTable SET balance = balance - :amount 
   WHERE accountID = :accountId AND balance >= :amount

然后检查ROW_COUNT() 看更新是否成功。 (PHP其他语言对此有特定的功能)

这有一个特别的好处,它避免了 SELECT - UPDATE 方法中隐含的竞争条件。

  • 更多查询 --> 花费更多时间。

  • UPDATESELECT 慢,但比 SELECT+UPDATE.

  • 如果 SELECT 的目的是查看是否需要 UPDATE,那么单独执行 UPDATE 可能会更好。

  • IODKU (upsert) 是一个单一查询,它检查一行是否存在,然后插入新行或更新现有行。 (使用 PRIMARYUNIQUE 键来确定新的还是现有的。)

  • 单个查询是“原子的”。但是 SELECT 加上 UPDATE 可能需要这些 四个 命令来避免“竞争条件”:

      START TRANSACTION;
      SELECT ...   FOR UPDATE;
      UPDATE  ...;
      COMMIT;