最快的插入方式,如果不存在,则在MySQL中获取id
有这张桌子。
| id | domain |
id
是主键。 domain
是一个唯一的键。
我想要:
- 插入一个新域(如果尚不存在)。
- 获取该域的
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:
- Insert a new domain, if it doesn't exist already.
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
除非有人另有说法,否则我会说不,这是最好的方法。
Until someone says otherwise, I'm saying No, that's the best way.
此方法有一个副作用:“每次找到重复键时,自动递增 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