最快的插入方式,如果不存在,则在MySQL中获取id

发布于 2024-10-20 13:53:04 字数 455 浏览 4 评论 0原文

有这张桌子。

| 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

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

There's this table.

| id | domain |

id is the primary key. domain is a unique key.

I want to:

  1. Insert a new domain, if it doesn't exist already.
  2. Get the id for that domain.

Now I'm doing it like this:

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

Then PDO::lastInsertId() to get the id.

But it's critical that this is as fast as it could, so I though I'd ask: Can I do this in a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我的奇迹 2024-10-27 13:53:04

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

Until someone says otherwise, I'm saying No, that's the best way.

源来凯始玺欢你 2024-10-27 13:53:04

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

1 exemple.com
15 xyz.com
25 pqr.com
50 thg.com

This method has a side effect: "The auto increment id increments by one each time the duplicate key is found".
When the query is run with exemple.com as the value first time
it creates the entry. Lets say you repeat that query 13 more times. After that you try with xyz.com you will be surprised to see that instead of auto increment id=2 you get 15.

1 exemple.com
15 xyz.com
25 pqr.com
50 thg.com

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文