主页 > tokenpocket钱包 > [比特派]自增主键是否会降低数据库insert性能?如果会的话为什么还有很多公司采用?

[比特派]自增主键是否会降低数据库insert性能?如果会的话为什么还有很多公司采用?

admin tokenpocket钱包 2022年07月26日
摘要:自增主键是否会降低数据库insert性能?如果会的话为什么还有很多公司采用?: 问题描述: 首先自增主键在insert的时


MySQL 中如果有自增字段的话,MySQL 会维护一个自增锁,InnoDB 表引擎会在内存里保存一个计数器来记录 AUTO_INCREMENT 值。

我观察过BAT以及国内很多大型互联网公司的网站,比如说京东的商品id,百度的用户id,新浪微博的用户id,贴吧的帖子id都是自增主键(长期观察可以发现他们随时间增长,应该是自增),当然也有反例,比如说QQ空间的说说(内部名称应该是mood,因为说说最早以前是由心情模块改来的)说说id用的就是类似于UUID这样的主键(其实格式很像md5)。

如果使用MySQL又使用UUID作为主键的话,那么插入效率必然大幅下降。

自增主键是否会降低数据库insert性能?如果会的话为什么还有很多公司采用? 问题描述:

首先自增主键在insert的时候,因为是自增,那么是不是要有一个自增值锁来防止这个自增值出现重复?有的话那岂不是会影响性能?

自增 ID 可以确保不会出现重复,大部分数据库都支持,使用非自增 ID 需要额外的代码实现。

第 5 个答案:

计算机的各个优化领域都面临取舍问题,利与弊的权衡选着...

主键为了保证不重复,如果不用GUID类似的机制,必须有一个集中的控制点,目前关系型数据库大部分都支持自增字段的特性进行控制,对开发来说比较简单,且对性能影响较小(Oracle的序列可以设置缓存,提前取出一批的序号,因此批量插入的时候并不是每插入一条就需要计算序号,mysql不知道是否有类似的机制)。

第 9 个答案:

总的来说,使用自增主键的原因就是开发简单,一般情况下不会成为性能瓶颈。

当插入一个新行数据时,就会用一个表锁来锁住这个计数器,直到插入结束。

第 4 个答案:

我这方面不太懂,但是感觉吧,如果我们手动来控制自增的话,那效率没有数据库自带来的快。

第 1 个答案:

其他数据库没用过,不做评价。

第 8 个答案:

是自增主键的目的是为了保持唯一性,使用主键一般并不会降低数据库的insert性能,如果使用主键都降低性能,那其他的操作就更不用说了。如果使用主键导致性能不好,一般社区核心开发人员都会解决,不需要我们担心。

用mysql自增主键生成id研究
https://www.zhihu.com/questio...

"依赖数据库自增机制达到全局ID唯一
主键自增不一定要交给数据库,也可以有单独的id生成器,应用插入前先拿到id然后再执行插入

可以参考一下我以前在知乎写的。
第 3 个答案:

深入的东西不懂,说一点比较浅的东西
第 7 个答案:

谢邀。

下一节:怎么修改ios上微信浏览器title标签

参考搬运以下:

第 10 个答案:
广告位
标签: sql   Java   mysql   oracle   php