【问题标题】:Is it more efficient to always run a delete query, or to check if that information exists first始终运行删除查询或首先检查该信息是否存在是否更有效
【发布时间】:2011-02-05 23:43:33
【问题描述】:

无论条目是否存在,默认情况下始终运行 DELETE 查询是否更有效,例如在一段时间后删除用户名 (DELETE * from table WHERE username='user'),还是应该先检查要删除的行使用SELECT 查询和检查mysql_num_rows 删除存在。

什么在服务器端使用更多的处理器资源?

显然一种方法包含更多代码,但我想知道某些 mysql 操作是否比其他操作使用更多的 CPU。

【问题讨论】:

    标签: php mysql performance


    【解决方案1】:

    删除效率更高,因为系统在查找要删除的行时花费的时间与在选择时所需的时间一样多(并且实际上所做的工作完全相同)。

    但是,如果您希望在删除零行时启动特殊逻辑,您可以使用ROW_COUNT() 函数并检查删除后它是否为零。

    另外,请参阅related answer here

    【讨论】:

    • 感谢 DVK 感谢您的回复。
    • 不客气。欢迎来到数据库性能的美妙世界:)
    【解决方案2】:

    无需检查,因为无论如何 MySQL 都会为您进行检查。检查将是一个您并不真正需要的额外查询,因为 DELETE 的工作方式它本身已经是一个检查查询,如果找到记录将被删除。

    【讨论】:

    • 而且,最重要的是,如果您的检查/删除操作不是原子的(删除是),您将冒有人在检查之后和删除之前插入的风险(您的不做,因为您的支票现在正在处理陈旧的信息)。
    【解决方案3】:

    我认为即使在基于集合的操作领域中没有记录受到影响,常规删除也可以很好地理解为“成功”。

    【讨论】:

      【解决方案4】:

      不考虑时间效率和运行时间,看程序的可读性,如果你有函数先检查数据是否存在,而不是直接调用删除函数,更容易理解,逻辑上也更容易阅读。这样,您可以添加额外的检查功能或确认选项。

      【讨论】:

      • 我在这里不同意你的观点。我认为即使在基于集合的操作领域中没有记录受到影响,常规删除也可以很好地理解为“成功”。另外,如果您要先检查,则会引入您必须担心的各种事务问题。当然,性能也受到打击......
      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多