在mysql中可以把UUID作为逻辑主键,物理主键依然使用自增ID 1、UUID定义 UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算
首先UUID的性能并不比自增ID差很多,这取决于UUID的生成算法。举个例子MongoDB所采用的ObjectId就是一个比较优秀的UUID策略,其组成是时间戳+机器码+进程码+自增数,其中机器码和进程码都可以一次性生成,这样得到一个ObjectId仅仅之比自增ID多了一个时间戳的获取。另外考虑到自增ID都要做主键唯一索引,而UUID可以只做索引,不做唯一索引(利用其特性,可以不考虑唯一性过滤),其性能可以说并不比自增ID差。
作为主键,UUID长度过长,主键索引KeyLength长度过大,而影响能够基于内存的索引记录数量,进而影响基于内存的索引命中率,而基于硬盘进行索引查询性能很差。严重影响数据库服务器整体的性能表现。 建议,
如果考虑分布式,可以仿造MongoDB建立索引,能有效实现服务器同步,KeyLength也很小。如果使用UUID进行数据同步管理,需要对UUID字符串进行Djb的Hash算法,然后对Int/Long类型的哈希数值进行索引。第一次检索,通过UUIDHashCode将结果集范围缩小,再使用UUID定位具体数据。这样性能能高很多。使用Int类型的ID作为主键。UUID不作为主键,而仅作为数据同步的标记字段被使用。
这个可能性很多:
一种可能是编写程序的人不喜欢将数据库主键直接暴露给终端用户查询,才会另外设置一个唯一ID。
还有可能是程序需要用这个UUID登录,但通常这个ID不能设为中文,这样可以让中文的昵称可以随意修改。
当然还有可能是需要通过一些协议进行交互的标志,比如通过新浪会员验证进来就有一个唯一的ID标志。
以上就是关于mysql主键默认主键uuid,只能用触发器吗全部的内容,包括:mysql主键默认主键uuid,只能用触发器吗、mysql 使用 uuid做主键 还是 自增 那个好、MySQL 用 UUID 作为主键,实际使用中有什么问题 · Ruby China等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)