首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >insert到数据库的查询优化

insert到数据库的查询优化
EN

Stack Overflow用户
提问于 2018-08-16 14:44:53
回答 2查看 37关注 0票数 0

我需要一个解决方案来在我的sql DB中以并发时间插入很多行。

我有一个规则,每次我在我的transaction表中插入数据时,我都需要一个由currentTime+transactionSource+sequenceNumber组成的惟一ID。我的问题是,当我使用Jmeter测试我的服务时,当并发插入进程达到3000行时,服务就会关闭。问题依赖于我生成的唯一ID的重复。所以,有一些重复的东西。在我的假设中,复制的发生是因为之前的一个插入过程还没有完成,但还有另一个插入过程。因此,它会生成唯一的ID副本。有没有人能给我一些建议,最好的方法是什么?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-08-16 18:54:27

MySQL有三种很好的方法来确保id的唯一性:

  • auto_increment columns
  • uuid()
  • uuid_short()

使用它们!实现唯一id的最常见方法是第一种:

代码语言:javascript
复制
create table t (
    t_id int auto_increment primar key,
    . . .
)

我强烈地,强烈地建议你不要维护你自己的身份。你得到了竞态条件(正如你所看到的)。您的代码的效率将低于数据库中的代码。如果需要单独的组件,可以将它们实现为表中的列。

换句话说,你的根本问题是你的“规则”。世界上有无数的数据库在没有这样的规则的情况下也能很好地工作。

票数 1
EN

Stack Overflow用户

发布于 2018-08-16 16:19:20

为什么不让数据库处理插入id,然后用包含所需格式的辅助字段更新行?如果你有副本,你总是可以把行id附加到这个标识符上,这样它就永远是唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51871068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档