前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql 8.0 更好的支持了 UUID

Mysql 8.0 更好的支持了 UUID

作者头像
dys
发布2018-04-04 13:31:38
4.5K0
发布2018-04-04 13:31:38
举报
文章被收录于专栏:性能与架构性能与架构

背景

UUID 是大家常用的,是一个 128bit 的字符串,例如:

代码语言:javascript
复制
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个函数:

  1. UUID_TO_BIN
  2. BIN_TO_UUID
  3. IS_UUID

通过这3个函数,使我们可以更方便的应用UUID,并且是对上面提到的几点不足的一个解决方案

UUID_TO_BIN 用于对 UUID 字符串进行二进制压缩,32字符-->16bit

BIN_TO_UUID 是相应的解压操作,16bit-->32字符

用法示例:

  • 建表
代码语言:javascript
复制
CREATE TABLE t (id binary(16) PRIMARY KEY); 
  • 插入
代码语言:javascript
复制
INSERT INTO t VALUES(UUID_TO_BIN(UUID()));
  • 查询
代码语言:javascript
复制
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,将会生成连续的有序值

代码语言:javascript
复制
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

IS_UUID 可以帮助我们验证传递过来的参数是否为有效的 UUID,合法的 UUID 是由 32个十六进制字符与几个可选字符('{', '-', '}')构成

下面几个示例都会返回 true,是合法的

代码语言:javascript
复制
SELECT is_uuid('{12345678-1234-5678-1234-567812345678}'); 
SELECT is_uuid('12345678123456781234567812345678'); 
SELECT is_uuid('12345678-1234-5678-1234-567812345678');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • 好处
      • 不足
      • MySQL 8.0 的处理方法
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档