数据库是否自增主键?-LINUX

首页 2024-07-05 10:46:29

1 每张表都应该有自增主键吗?

不一定
自添加主键可以加速行的插入速度,对表的空间利用有优势,碎片化不明显。

但是对于一些内容,比如根据uid查询非常频繁集中,如果不需要添加自己的主键,而是使用uid ID作为复合键,查询效率会提高,但插入和碎片化会增加。但如果数据库的存储类型是ssd,那么这个问题就不存在了。

因此,在大多数情况下,表中有自增主键是正确的。

2 自增主键在业务上是否有独特性?

不一定

在单表结构下,是的。

多表情况下,不一定,需要一定的策略,比如设置不同的后缀,相同的间隔等等。

3 自增主键能否涉及业务?

不建议这样做。

例如,表可以有一个自添加的主键,表是独一无二的。在根据ID查询和更新时,操作可以简化。但一般来说,当与业务有关且需要独特性时,业务应独立维护,如使用格式或算法、hash生成等。

4 如何在多表的情况下保持业务维护的主键的独特性?

维护自增键区间段,服务器每次取其中一段,乐观锁更新。这需要额外的表或策略来维护这个字段。

固定时间前缀基于算法A,如:yyyyMMddHHmmss 表数mod值 随机数,通过增加位数来减少冲突的可能性。如果在插入表字段时抛出重复字段值异常,则在插入表字段时有独特的限制(但有时限制不可靠)。

固定时间前缀基于算法B,如:yyyyMMddHHmmss 固定位数与自增值N相撞 随机数。冲突的可能性不需要通过增加位数来降低。重复字段值异常插入抛出时,N ,重新插入,直到不再发生冲突。此后固定使用N作为中缀,N缓存在服务器中,重启后继续使用中缀。如果出现重复异常,N将再次出现 可以执行相同的操作。N的mod值不需要故意提及。

基于中缀管理,即向中心服务器报告中缀,可以理解服务器id关系有缓存的地方,中缀的动态分配。

还有很多其他的方法,还没用过,就不赘述了。
算法B简单,通信少,碰撞次数有限。算法A,有无限的碰撞次数,尽管百分比非常非常低。然而,在高并发性和初始化的情况下,算法B将比算法A更暴风雨。

区间段和中间装饰管理都引入了中心节点的概念,依赖性强,但相对可靠,实现行业更为普遍。

以上是数据库是否自增的关键?更多详细信息,请关注其他相关文章!


p
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道