mysql 自增id和UUID做主键性能分析,及最优方案
1.为什么会想到用uuid做主键 (1).其实在innodb存储引擎下,自增长的id做主键性能已经达到了最佳。不论是存储和读取速度都是最快的,而且占的存储空间也是最小。 (2).但是在我们实际到项目中会碰到问题,历史数据表的主键id会与数据表的id重复,两张自增id做主键的表合并时,id一定会有冲突,但如果各自的id还关联了其他表,这就很不好操作。 (3).如果使用UUID,生成的ID不仅是表独立…
1.为什么会想到用uuid做主键 (1).其实在innodb存储引擎下,自增长的id做主键性能已经达到了最佳。不论是存储和读取速度都是最快的,而且占的存储空间也是最小。 (2).但是在我们实际到项目中会碰到问题,历史数据表的主键id会与数据表的id重复,两张自增id做主键的表合并时,id一定会有冲突,但如果各自的id还关联了其他表,这就很不好操作。 (3).如果使用UUID,生成的ID不仅是表独立…
在hibernate中一个数据模型的主键常用有三种形式:uuid、native、assigned,分别是通用唯一标识、自增、自定义。 1、uuid是系统产生的,insert数据库时相比native要快很多,但是uuid是一长串无序字符串,理论上讲查找起来会慢一点,但是不太会影响开发的。而native是数据库生成,在insert时会先计算所以会比uuid慢一点,但是在查找和删除数据时,会比较方便。 …
设计MySQL数据库表的时候,一定会考虑主键的设计。mysql官方推荐不要使用uuid或者不连续不重复的雪花id,推荐连续自增的主键id,官方的推荐是auto_increment。为什么不建议采用uuid,使用uuid究竟有什么坏处? 如果设计表不设置主键,MySQL官方有以下说明: If you do not define a PRIMARY KEY for your table, MySQL …
使用场景 有时候需要给表中已有数据填充一个字段为 UUID , 比如更新所有ID等。 操作思路 先给每一条数据增加一个UUID 将UUID中的 - 替换为空 方案一:一次性替换sql select REPLACE ( UUID( ), _utf8 '-', _utf8 '' ) AS UUID from table; 方案二:二次更新sql( 注:不一次完成的原因是 使用替换函数后, 所有记录返回…
public static void main(String[] args) { int hashCode = java.util.UUID.randomUUID().toString().hashCode(); if (hashCode <0){ hashCode=-hashCode; } // 0 代表前面补充0 // 10 代表长度为10 // d 代表参数为正数型 String fo…
在分布式系统中,往往需要对大量的数据和消息进行唯一标识,此时一个能够生成全局唯一ID的系统是非常必要的,那么业务系统对ID号的要求有哪些呢? 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消…
@GeneratedValue:主键的产生策略,通过strategy属性指定。 主键产生策略通过GenerationType来指定。GenerationType是一个枚举,它定义了主键产生策略的类型。 1、AUTO 自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedVa…
场景 : 客户提出一个问题就是把用户的登录记录和设备绑定到一起,就是每个人都是固定的设备(可能是安全因素吧)。 一开始想的是回去设备的IMEI号和用户账号绑定起来,结果发现IMEI不对外开发,只能另寻他法,最后通过获取设备序列号作为唯一标识。 开始了解可以用什么标识 来用 。 js获取手机唯一标识码 Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI、IMSI、型号、厂商等。通过…
如果还没有创建表,那么使用下面的方式创建就可以了。create table testuu(id varchar2(2000) default sys_guid(),name varchar2(2000)) ;如果已经创建了表,那么先保证你原有的主键ID没有任何实际的业务意义,要修改的话使用下面的方法。alter table testuu modify id default sys_guid() ;…