首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql主键为uuid如何生成

基础概念

MySQL中的主键(Primary Key)是用于唯一标识表中每一行数据的字段。UUID(Universally Unique Identifier)是一种由 128 位数构成的标识符,能够保证在全球范围内的唯一性。

生成方式

在 MySQL 中,可以使用内置函数 UUID() 来生成 UUID。当将这个函数作为默认值赋给主键字段时,每次插入新记录时,该字段都会自动生成一个新的 UUID。

相关优势

  1. 全局唯一性:UUID 能够保证在任何系统、任何时间生成的标识符都是唯一的。
  2. 安全性:由于 UUID 的随机性,它比自增 ID 更难被猜测,因此在某些安全敏感的应用中更有优势。
  3. 分布式友好:UUID 不依赖于数据库的自增机制,因此在分布式系统中更容易实现数据的一致性和唯一性。

类型与应用场景

  • 类型:UUID 通常表示为 32 个十六进制数字,分为五组,形式为 8-4-4-4-12。
  • 应用场景:适用于需要全局唯一标识符的场景,如用户身份识别、订单号生成、分布式系统中的数据同步等。

示例代码

假设我们有一个名为 users 的表,其中 id 字段被设置为主键,并且类型为 UUID,默认值为 UUID()

代码语言:txt
复制
CREATE TABLE users (
    id CHAR(36) NOT NULL DEFAULT (UUID()),
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    PRIMARY KEY (id)
);

遇到的问题及解决方法

问题:UUID 作为主键的性能问题

原因:UUID 是随机生成的,这可能导致在插入大量数据时,索引碎片化严重,从而影响查询性能。

解决方法

  1. 使用有序 UUID:虽然标准的 UUID 是随机的,但可以通过一些算法生成有序的 UUID,如时间戳 + 随机数的方式,这样可以减少索引碎片化。
  2. 优化存储引擎:使用支持空间分区(如 InnoDB 的表空间分区)的存储引擎,可以分散数据和索引的存储,提高性能。
  3. 定期重建索引:对于已经存在大量数据的表,可以定期进行索引重建,以减少碎片化。

参考链接

请注意,以上信息仅供参考,实际应用中可能需要根据具体需求和场景进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,...本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid...,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的id:一串18位长度的...long值 id自动生成表: image.png 用户uuid表 image.png 随机主键表: image.png 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate

3.9K20
  • Python 如何生成uuid

    每个人都可以创建与其他人不冲突(重复)的UUID,因此常用作对某一东西的唯一标识。 UUID常用作数据库的主键。 UUID常用作一次计算任务的唯一标识。...Python uuid Python中内置了一个名为uuid包来处理UUID的生成,使用起来非常方便,它提供了生成36位uuid的方法(32位加上4个’-'号作为间隔符,如果不需要间隔符可以手动去掉)。...Python的uuid包一共提供了4中生成UUID的方法: uuid1() uuid3() uuid4() uuid5() 注:没有uuid2。...但是用这种方法生成uuid并分享泄露了自己的mac地址,因此不推荐使用。 uuid3根据传入的namespace和一个由调用者指定字符串调用MD5算法生成。...uuid5同样根据传入的namespace和一个由调用者指定字符串生成uuid,如uuid3不同的是,它使用SHA1算法。

    2.7K40

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

    前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...关于MySQL的知识点总结了一个思维导图分享给大家 [1240] 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key...,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....long值 id自动生成表: [图片] 用户uuid表 [图片] 随机主键表: [1240] 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架:springboot...表写入结果: [1240] 1.4.效率测试结果 [1240] 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: [1240] 可以看出在数据量100W左右的时候,uuid

    5.1K30

    使用uuid做MySQL主键,被老板,爆怼一顿!

    来源:cnblogs.com/wyq178/p/12548864.html 前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键...一:mysql和程序实例 1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...key作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: **注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复...*无规律*的id:一串18位长度的long值 id自动生成表: 用户uuid表 随机主键表: 1.2:光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架...表写入结果: 1.4:效率测试结果 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: 可以看出在数据量100W左右的时候,uuid的插入效率垫底,并且在后序增加了130W

    1.2K30

    使用uuid做MySQL主键,被老板,爆怼一顿!

    和自增id的索引结构对比 2.1.使用自增id的内部结构 2.2.使用uuid的索引内部结构 2.3.使用自增id的缺点 三、总结 ---- 前言 在mysql中设计表的时候,mysql官方推荐不要使用...uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....long值 id自动生成表: 用户uuid表 随机主键表: 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架:springboot+jdbcTemplate...表写入结果: 1.4.效率测试结果 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: 可以看出在数据量100W左右的时候,uuid的插入效率垫底,并且在后序增加了130W

    1.7K60

    MySQL中主键为0和主键自排约束的关系

    现在主键是没有0的,如果把某个id改成0的话,0不会变!...如果使用主键自排约束以前表里有0,再设置完主键自排以后所有的0又不会根据行数,而是直接按照自上而下的顺序从1开始排。...如果把表中的某个主键的数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在的,那为什么本身存在的0要去修改成从1开始的递增序列呢?...哪怕没加主键自排以前只有一个0,加了主键自排以后还是会变成1。   开始有0,增加主键自排约束,0依次变为1,2,3,4.......   ...开始没0,增加主键自排约束,新添加的主键是0的行会根据行数自行变化,注意这里是新添加的行,使用的是insert。   开始没0,把某个主键的数修改成0,这个0会直接在排好序了再在表里显示出来。

    4.3K30

    为什么MySQL不推荐使用uuid或者雪花id作为主键?

    p=5090 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...用户uuid表 ? 随机主键表: ?...user_uuid表写入结果: ? 1.4.效率测试结果 ? 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: ?...id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。

    4K20

    mysql 自增id和UUID做主键性能分析,及最优方案

    UUID UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。...{"+uuid.toString()+"}"); } } 组成 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。...UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。...在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是...4.如果非要使用uuid做主键,下面是小建议: 如果是主从即M-S模式,最好是不使用mysql自带函数uuid来生成唯一主键,因为主表生成的uuid要再关联从表时,需要再去数据库查出这个uuid,需要多进行一次数据库交互

    8.4K20

    华为面试官:为什么MySQL不推荐使用uuid作为主键?

    1、前言 在MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...2 MySQL和程序实例 ★ 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key...根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的id:一串18位长度的...long值 ID自动生成表: 用户UUID表: 随机主键表: ★ 只有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试 技术框架:springboot+jdbcTemplate...表写入结果: ★ 效率测试结果 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: 可以看出在数据量100W左右的时候,uuid的插入效率垫底,并且在后序增加了130W

    2.1K20

    使用雪花id或uuid作为MySQL主键,被老板怼了一顿!

    磊哥,前几天在做项目demo的时候,使用雪花id或uuid作为Mysql主键,被老板怼了一顿!...一、MySQL和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...key作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的...用户uuid表 ? 随机主键表: ?...user_uuid表写入结果: ? 1.4 效率测试结果 ? 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: ?

    8.9K32

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    来源:cnblogs.com/wyq178/p/12548864.html ---- 前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一)...,而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...一、mysql和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...long值 id自动生成表: 用户uuid表 随机主键表: 1.2 光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架: springboot+jdbcTemplate...表写入结果: 1.4 效率测试结果 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: 可以看出在数据量100W左右的时候,uuid的插入效率垫底,并且在后序增加了130W

    1.2K20

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    ---- 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid...,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....用户uuid表 ? 随机主键表: ?...user_uuid表写入结果: ? 1.4.效率测试结果 ? 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: ?

    2.2K10

    使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

    和程序实例 **1.1 要说明这个问题, 我们首先来建立三张表** 分别是`user_auto_key,user_uuid`,`user_random_key`, 分别表示自动增长的主键, uuid...作为主键, 随机 key 作为主键, 其它我们完全保持不变....根据控制变量法, 我们只把每个表的主键使用不同的策略生成, 而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机 key 其实是指用雪花算法算出来的前后不连续不重复**无规律**...,然后分析了 id 的机制不同在 mysql 的索引结构以及优缺点,深入的解释了为何 uuid 和随机不重复 id 在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据 mysql 的官方推荐最好使用自增 id,mysql 博大精深,内部还有很多值得优化的点需要我们学习。

    2.9K00

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    前言: 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...# mysql和程序实例 1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key...作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的...表写入结果: 4.效率测试结果 在已有数据量为130W的时候:我们再来测试一下插入10w数据,看看会有什么结果: 可以看出在数据量100W左右的时候,uuid的插入效率垫底,并且在后序增加了130W...id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。

    1.6K10

    mysql中清空表数据,并重置主键为1

    MySQL中清空表数据,并重置主键为1 ️ 摘要 在本文中,我将向大家展示如何在 MySQL 数据库中清空表的所有数据,并将主键重置为 1。...这种情况下,仅仅删除数据是不够的,最好还能将主键(通常是自增的)重置为 1。今天,我将向你们展示如何做到这一点。...命令的一个额外好处是,它会重置表的自增主键为 1。...如果你想单独重置主键,可以使用 ALTER TABLE 语句,如下: ALTER TABLE table_name AUTO_INCREMENT = 1; 例如,要将 users 表的主键重置为 1,你可以这样做...总结 清空 MySQL 表数据并重置主键为 1 是一个非常简单但有用的操作,特别是在开发和测试阶段。通过使用 TRUNCATE TABLE 或 ALTER TABLE 语句,你可以轻松完成这个任务。

    52110
    领券