首页
学习
活动
专区
圈层
工具
发布

MySQL中存储UUID的最佳实践

在MySQL中有一个UUID () 函数,通常用UUID做唯一标识,需要在数据库中进行存储。使用此函数可以让MySQL生成一个UUID值,并以VARCHAR(36)类型的可读形式返回。...但是对于像MySQL的InnoDB存储引擎来说,使用UUID作为主键(PRIMARY KEY)会带来一些问题。 1、问题阐述 问题一:UUID的长度问题 UUID的长度为36个字符。...由于主键和二级索引的尺寸很大,所以不利于在内存中操作 问题二:UUID的格式问题 MySQL的UUID ()使用的是version 1的UUID,该类型的UUID的特点是基于时间,它是一个128位的数字...那么我们可以使用虚拟列(MySQL5.7的新特性,虚拟列不占用存储空间)来存放文本形式的UUID。 然后,还有如何巧妙地重新排列二进制形式的字节的问题。...纵轴-数据文件尺寸(单位MB) UUID表的用varchar(36)存储的文件大小几乎比有序UUID表用BINARY(16)存储的文件大45% 实际处理时间 横轴-插入次数

11.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ABAP 生成唯一标识字段uuid ,guid

    什么是UUID , GUID UUID ,GUID ,是全局的唯一标识,所以数据都不会重复,目前按照资料分为4种,分别为 16位, 22位 ,26位, 32 位 ....技术介绍 uuid,guid ,主要是调用函数create_system_uuid( ) 其中生成lv_uuid_x16 后在调用函数 convert_uuid_x16 生成对应的 c22 ,c32...DATA lv_uuid_x16 TYPE sysuuid_x16. " raw(16) -> data element GUID DATA lv_uuid_c22 TYPE sysuuid_c22...结果展示 如图所示,uuid,guid ,展示的内容如图所示.此项数据既可以作为加密数据内容,也可以做主键,或者日志等方便查询的唯一值数据.在自建立表中经常使用. 具体使用应情况按照长短适配....生成唯一值 uuid ,guid 的实例讲解. 技术难度偏低. 只要注意使用元素类型的长短,按照合理业务场景自行选择即可 . 这里是百里一个是努力的学习者 .

    4.3K20

    C#中的三种唯一ID生成方案:GUID、UUID、ULID详解

    今天咱们就来聊聊C#里三种常用的唯一ID生成方案:GUID、UUID和ULID。 别被这些英文缩写吓到,其实都挺简单的。 什么是GUID?...分布式系统需要生成唯一ID 微软技术栈项目 不需要排序的场景 API接口的资源标识 什么是UUID? UUID其实就是GUID的"国际标准版",格式完全一样,只是叫法不同。...UUID有好几个版本: UUID v1: 基于时间戳和MAC地址(可能泄露隐私) UUID v4: 完全随机(最常用) UUID v3/v5: 基于命名空间(可重现) 在.NET里,Guid.NewGuid...很多同学可能不知道,用GUID做主键其实挺坑的。 为什么GUID/UUID性能不好? 想象一下,你有一本通讯录,按姓名排序。如果每次都往中间随机插入新联系人,你得不停地挪动其他条目,很麻烦对吧?...GUID var uuid = Guid.NewGuid(); Console.WriteLine($"UUID: {uuid}"); // 如果需要特定版本的UUID,可能需要第三方库 // 比如

    4.6K10

    Mysql 8.0 更好的支持了 UUID

    定义了5个版本,MySQL 实现的是版本1,由 时间戳、UUID版本、MAC地址构成 好处 MySQL 中使用 UUID 是对 AUTO_INCREMENT PRIMARY KEY的一个很好的替代,有如下好处...: keys 在不同 表、库、服务器 中都是唯一的 安全性更好,很难猜 可以离线生成 可以简化数据库复制 不足 但也有不好的地方: 增加了存储空间 增加了问题调试的难度 有性能问题,因为长度更长,并且无序...MySQL 8.0 的处理方法 MySQL8.0 新增了3个函数: UUID_TO_BIN BIN_TO_UUID IS_UUID 通过这3个函数,使我们可以更方便的应用UUID,并且是对上面提到的几点不足的一个解决方案...UUID_TO_BIN 用于对 UUID 字符串进行二进制压缩,32字符-->16bit BIN_TO_UUID 是相应的解压操作,16bit-->32字符 用法示例: 建表 CREATE TABLE...4439c456d444 | | af0f27e2-9aad-11e6-852c-4439c456d444 | +--------------------------------------+ 通过压缩,很好的改善了存储空间过大的问题

    6.1K110

    为啥不能用uuid做MySQL的主键 ?

    在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,...那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 image.png 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    4.7K20

    MySQL数据迁移批量写UUID数据工作记录

    MySQL数据迁移批量写UUID数据工作记录 背景:最近在迁移表数据,需要向一张业务关联表批量写数据,所以需要批量生成uuid和时间等等数据 软件环境: Mysql5.0+ navicat 注意:遇到一个问题...replace(uuid() , '-' ,''),通过replace查询uuid,发现全都一样,所以批量写数据时候,不能使用replace,直接使用uuid()这个函数就可以批量生成uuid,然后再更新...uuid就行 使用uuid()才会生成不一样的uuid insert into t_catalog_division (CODE, CREATE_MAN, CREATE_MAN_NAME, CREATE_TIME...,UPDATE_MAN,UPDATE_MAN_NAME,UPDATE_TIME,valid,FROM_CATALOG_CODE,BUSINESS_DIVISION_CODE) SELECT UUID()...(select FORM_CATALOG_CODE from t_catalog_division where FORM_CATALOG_CODE = a.CODE) limit 100 批量更新主键uuid

    1.9K20

    生成UUID论英雄:Python、MySQL和Power BI谁强?

    在python中有个bson包,BSON是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。...代码直接生成: import bson demoid = bson.ObjectId() print(demoid) 结果: MySQL 在MySQL中,我们可以用uuid()函数来生成一个UUID...在微软的整个体系中,UUID的标准是GUID。 GUID 是 Globally Unique IDentifier 的首字母缩写。...换句话说,GUID 是一个高度唯一的 ID,即使它是随机生成的,也不太可能重现(基于概率) - 确实如此,且与UUID一致。...而Text.NewGuid是直接生成一个新的GUID: 直接对其进行调用: 比如我们要在Power BI中对一个姓名表生成不同的UUID,以下为姓名表: 我想为每一个NAME随机生成一个UUID

    3.4K10

    Java 中将 UUID 存储为 Base64 字符串

    概述使用 Base64 编码来对 UUID(Universally Unique Identifiers) 存储在一些特定的场合被广泛的使用。...使用 Base64 对比直接使用 UUID 进行存储来说能够更多的节约空间。本文对这方面的相关内容和问题进行探讨。在这里,使用 Base64 来对 UUID 进行存储,涉及到一些类型的转换的。...byteBuffer.putLong(originalUUID.getLeastSignificantBits());当程序执行完上面的 2 行代码后,我们将会获得 一个 ByteBuffer 对象,这个对象中存储的是...为了进一步节约我们的存储空间,我们可以把这 2 个等号从字符串中删除。我们可以配置编码函数,告诉编码函数不要在字符串的末尾添加 2 个等号。...ID 识别标识,我们通过对 Base64 的转换来让 UUID 能够以更小的数据量来进行存储。

    80310

    【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)

    环境下主键自增、mysql环境下主键为uuid、mysql环境下主键自增、mysql环境下主键为uuid。   ...数据库为mysql ---- 主键为自增时(主键为数值类型且自增)   利用mysql的LAST_INSERT_ID()方法获取插入记录的主键,select LAST_INSERT_ID()可以在插入数据后...主键为UUID时(主键必须为字符类型)   使用mysql的方法UUID()方法获取随机的UUID作为主键,select UUID()可以在插入数据前,生成随机的UUID并通过keyProperty赋值给将要插入记录的主键...背 景数据库为oracle: 主键为自增时(主键为数值类型):   在oracle中实现主键自增,需要先创建序列,相当于创建一个全局变量,用来存储对应表的主键的当前最大值(主键为数值类型时)。   ...时   用oracle自带的SYS_GUID()方法获得随机的GUID作为主键: <insert id="insertUser" parameterType="com.danny.mybatis.po.User

    3.1K20

    分布式系统ID生成方案汇总

    数据库自增长字段 本文只整理MySQL的自增字段方案,Oracle和SQL Server的自增长方案就不介绍了。...auto_increment使用说明 如果把一个NULL插入到一个auto_increment数据列中,MySQL将自动生成下一个序列编号。...在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成,有单点故障的风险 很难处理分布式存储的数据表,尤其是需要合并表的情况下 安全性低,因为是有规律的,容易被非法获取数据 UUID...,无法保证趋势递增 不可读 UUID的变种 UUID to Int64 为了解决UUID不可读的问题,可以使用UUID to Int64的方法。...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。

    1.6K20

    java开发_UUID(Universally Unique Identifier,全局唯一标识符)和GUID(Globally Unique Identifier,全球唯一标识符)

    GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 所以GUID就是UUID。...GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。...从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。...{ public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println...1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同   (2)时钟序列   (3)全局唯一的IEEE机器识别号,如果有网卡

    1.8K10

    为什么MySQL不推荐使用uuid作为主键?

    前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...uuid,使用uuid究竟有什么坏处?...关于MySQL的知识点总结了一个思维导图分享给大家 [1240] 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 [1240] 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    5.9K30

    使用“COMB(Combine)”类型设计思路

    数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID...也许有人会担心UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1毫秒,时间4095年,两个COMB类型数据完全相同的可能性是在这1毫秒内生成的两个GUID...注意这16字节转化为16进制再转化为字符串存储时也是32字节。   ...首先,MySQL时间戳timestamp是采用int存储,4个字节,最多32位,可以从1970年1月1日00:00:00一直到2037年,精度为一秒,其值作为数字显示。   ...; } } }` 索引的类型 索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。

    70500

    MySQL有哪些存储引擎(MySQL存储引擎大全)

    MyISAM在所有MySQL版本里被支持;不支持事务处理;它是MySQL的默认的存储引擎; MEMORY MEMORY存储引擎,别称HEAP存储引擎;提供“内存中”表,将数据存储在内存中。...MEMORY存储引擎不支持事务处理;MySQL的所有版本都支持InnoDB存储引擎;注释:MEMORY存储引擎正式地被确定为HEAP引擎。...InnoDB存储引擎;它支持事务处理; BDB BDB存储引擎,别名BERKELEYDB;BDB存储引擎提供事务安全表;mysql 5.1以下版本才支持此存储引擎; EXAMPLE EXAMPLE存储引擎是一个...你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。...NDB NDB存储引擎,别名NDBCLUSTER;NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。

    8.4K41
    领券