Mysql 8.0 更好的支持了 UUID
时间:2022-05-07
本文章向大家介绍Mysql 8.0 更好的支持了 UUID,主要内容包括背景、不足、MySQL 8.0 的处理方法、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
背景
UUID 是大家常用的,是一个 128bit 的字符串,例如:
12345678-1234-5678-1234-567812345678
UUID 是有版本的,不同版本有不同的底层结构,RFC4122 定义了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 t (id binary(16) PRIMARY KEY);
- 插入
INSERT INTO t VALUES(UUID_TO_BIN(UUID()));
- 查询
SELECT BIN_TO_UUID(id) FROM t;
+--------------------------------------+
| BIN_TO_UUID(id); |
+--------------------------------------+
| 586bcc2d-9a96-11e6-852c-4439c456d444 |
| 5942e49a-9a96-11e6-852c-4439c456d444 |
| af0f27e2-9aad-11e6-852c-4439c456d444 |
+--------------------------------------+
通过压缩,很好的改善了存储空间过大的问题,但还存在性能问题,无序意味着要向索引树中随机位置插入,在不能很好的利用内存的情况下,将会产生不少IO操作,也就明显的影响了性能
UUID_TO_BIN
有一个可选的第二个参数,就是用来解决无序引起的性能问题的
把第二个参数设置为 true,将会生成连续的有序值
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
IS_UUID
可以帮助我们验证传递过来的参数是否为有效的 UUID,合法的 UUID 是由 32个十六进制字符与几个可选字符('{', '-', '}')构成
下面几个示例都会返回 true,是合法的
SELECT is_uuid('{12345678-1234-5678-1234-567812345678}');
SELECT is_uuid('12345678123456781234567812345678');
SELECT is_uuid('12345678-1234-5678-1234-567812345678');
- 基类、接口的应用——表单控件:一次添加、修改一条记录,一次修改多条记录。(上)
- 使命必达: 深入剖析WCF的可靠会话[协议篇](下)
- 分页控件和几个相关控件的源代码
- Python编程中的反模式
- Python机器学习库:Scikit-Learn简介
- 很简单的企业管理器---我写程序的方式,几个自定义控件。
- 使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
- 其实添加数据也可以这样简单——表单的第三步抽象(针对UI及后置代码)
- 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造
- 如何使用Python基线预测进行时间序列预测
- 如何使用统计显着性检验来解释机器学习结果
- 其实添加数据也可以这样简单——表单的第一步抽象(针对数据访问层)《怪怪设计论: 抽象无处不在 》有感
- WCF服务端运行时架构体系详解[上篇]
- 使命必达: 深入剖析WCF的可靠会话[编程篇](下)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 性能测试工具——wrk
- String - 67. Add Binary
- Math - 50. Pow(x, n)
- String - 44. Wildcard Matching
- DFS&BFS - 37. Sudoku Solver
- Array - 36. Valid Sudoku
- Array - 57. Insert Interval
- Binary Search - 378. Kth Smallest Element in a Sorted Matrix
- Array - 59. Spiral Matrix II
- Array - 54. Spiral Matrix
- String - 8. String to Integer (atoi)
- Array - 16. 3Sum Closest
- Array - 15. 3Sum
- Design - 146. LRU Cache
- LinkedList - 142. Linked List Cycle II