【问题标题】:Fastest way to insert, if not exist, then get id in MySQL最快的插入方式,如果不存在,则在 MySQL 中获取 id
【发布时间】:2011-07-09 08:36:20
【问题描述】:

有这张桌子。

| id | domain |

id 是主键。 domain 是唯一键。

我想:

  1. 如果新域不存在,请插入新域。
  2. 获取该域的id

现在我这样做了:

INSERT INTO domains
SET domain = 'exemple.com'
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)

然后PDO::lastInsertId() 得到id

但关键是要尽可能快,所以我想问:我能以更好的方式做到这一点吗?

【问题讨论】:

  • ol li code 的 CSS 似乎有点不对劲?
  • id 有什么用?它是否只是用作主键(即它对您的应用程序不透明?)
  • 是的。我将它用于请求日志,并认为 varchar 对于有很多行的表来说会很广泛。

标签: mysql performance optimization pdo lastinsertid


【解决方案1】:

除非有人说,否则我会说不,这是最好的方法

【讨论】:

    【解决方案2】:

    此方法有一个副作用:“每次找到重复键时,自动增量 id 都会增加 1”。
    首次以 example.com 作为值运行查询时 它创建条目。假设您再重复该查询 13 次。之后,您尝试使用 xyz.com,您会惊讶地发现 id=2 不是自动递增,而是 15。

    1 个例子.com
    15 xyz.com
    25 pqr.com
    50 thg.com

    【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2017-02-10
    • 1970-01-01
    • 2017-03-07
    • 2023-03-21
    • 2012-08-31
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多