【问题标题】:MYSQL unique VS php SELECT then insert.. Which is faster? [closed]MYSQL unique VS php SELECT then insert..哪个更快? [关闭]
【发布时间】:2014-12-11 15:01:26
【问题描述】:

如果我想在表中维护一个唯一字段,哪个更快

运行选择查询然后插入查询

或直接运行插入查询,但在表中具有唯一字段

【问题讨论】:

  • 一个查询比两个查询运行得快,你不觉得吗?
  • 试试看。我的猜测是单个查询会更快。此外,将其作为表定义是放置此类域信息的正确方法。
  • 如果您的字段需要包含唯一值,那么您必须在其上添加UNIQUE INDEX。否则它不会是唯一的太久。如果您在数据库中已经有了这个约束,那么再次从 PHP 实现它的意义何在。更不用说,由于并发访问,无论您使用哪种语言,您都无法从外部源强制执行唯一性。
  • PHP 将“SELECT”发送到 MySQL。有一个滞后。 MySQL 完成这项工作并返回结果。您使用 PHP 进行一些处理。你再查询。再次涉及一些少量的延迟。您指示 MySQL 插入。但此时可能存在具有该值的记录。现在 - 所有这一切都与一次插入、一次行程、一次错误检查相比。
  • @axiac +1 用于并发访问。 Check-then-insert 迟早会出错。

标签: mysql unique


【解决方案1】:

如果您想在数据库中维护一个唯一列,请使用数据库机制。在列上创建唯一索引或唯一约束。 使用数据库,而不是反对它。

此外,您的第一种方法存在一个主要问题。您正在引入竞争条件。两个进程可能会尝试同时插入相同的记录。他们都会查看表中的值,并且都会看到插入没问题。然后两者都会插入相同的值,创建一个副本。

当然,对此有一些变通方法,通常涉及事务逻辑或锁定表。这两者都会引入额外的开销,从而降低性能。

只需创建一个唯一的列,不必担心唯一性——数据库会为您解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2020-10-08
    • 2020-02-12
    • 2010-10-07
    • 2011-06-12
    • 2012-08-25
    • 2015-11-03
    相关资源
    最近更新 更多