文档章节

mysql InnoDB UUID 主键 性能优化【原理篇】.md

北京起航
 北京起航
发布于 2015/05/22 18:36
字数 1035
阅读 531
收藏 5
点赞 1
评论 0

mysql InnoDB uuid 主键 性能优化【原理篇】.md mysql InnoDB UUID 主键 性能优化【实践篇】.md 有序uuid mysql InnoDB UUID 主键 性能优化【原理篇】.md mysql InnoDB UUID 主键 性能优化【性能分析篇】.md

##1. mysql InnoDB 表主键用uuid还是int类型的自增序列?

主键大多场景还是自增序列类型,效率高 1.自增序列 简单,存储空间效率高 适合简单的管理系统;单库环境 分库处理麻烦一下;需要配置offset,数据整合复杂

2.uuid 一些场景,更适合uuid 分库分表:UUID支持对表进行水平划分,将数据分布存储在多台不同的机器上,动态扩缩容。 内存生成对象,对象id在内存做关联运算时,可以使用uuid或分布式int id; 【如果用序列,需要和db通信后,才能获取id;】 数据经过多个server处理后,才入库;如分布式发现资源、子资源,集中入库;dcs产生数据、ccs入库

3.分布式id 自定义int类型主键生成算法; 用分布式int类型的id,如redis产生id

本文针对uuid使用进行优化

##2.UUID ###2.1UUID概念 UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的

UUID是16字节128位长的数字,通常以36字节的字符串表示,示例如下:
f5a96171-0045-11e5-9cc7-fcaa1490706f 其中的字母是16进制表示,大小写无关。
uuid36位去掉- 为32位

###2.1UUID排序

标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) UUID组成:

(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

要想每次生成的uuid有序,就需要把时间放后,机器码提前。 排序示例

原始uuid    22886ea0-0048-11e5-9e24-fcaa1490706f    转换后    11e5-0048-9e24-fcaa1490706f-22886ea0
原始uuid    229c92e1-0048-11e5-9e24-fcaa1490706f    转换后    11e5-0048-9e24-fcaa1490706f-229c92e1

###2.3JAVA 的UUID

Java UUID Generator (JUG):开源UUID生成器,LGPL协议,支持MAC地址。
java 自带uuid

##3.为什么需要UUID有序

###3.1InnoDB引擎表的一些关键特征

 
InnoDB引擎表是基于B+树的索引组织表(IOT);
每个表都需要有一个聚集索引(clustered index);
所有的行记录都存储在B+树的叶子节点(leaf pages of the tree);
基于聚集索引的增、删、改、查的效率相对是最高的;
如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引;
如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引;
如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
 

综上总结,如果InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的. 自增序列效率高的原因;uuid无序,就要想办法使其相对有序。

###3.2MySQL聚簇索引 MySQL聚簇索引保证关键字的值相近的元组存储的物理位置也相同(所以随机字符串,会使得系统进行大量的移动操作),且一个表只能有一个聚簇索引。因为由存储引擎实现索引,所以,并不是所有的引擎都支持聚簇索引。目前,只有solidDB和InnoDB支持。   聚簇索引的结构大致如下: 输入图片说明

© 著作权归作者所有

共有 人打赏支持
北京起航
粉丝 53
博文 51
码字总数 29304
作品 0
海淀
架构师
MyISAM和InnoDB区别详解

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transacti...

xiaocao13140 ⋅ 04/20 ⋅ 0

MYSQL主从复制搭建及切换操作(GTID与传统)

如下: MYSQL主从复制方式有默认的复制方式异步复制,5.5版本之后半同步复制,5.6版本之后新增GTID复制,包括5.7版本的多源复制。 MYSQL版本:5.7.20 操作系统版本:linux 6.7 64bit 1、异步...

rootliu ⋅ 昨天 ⋅ 0

MySQL基础(三)【MySQL事务与存储引擎】

3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始事务 co...

yanfeilai528 ⋅ 04/14 ⋅ 0

MySQL存储引擎——MyISAM与InnoDB区别

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的...

一零贰IV ⋅ 05/30 ⋅ 0

mysql InnoDB UUID 主键 性能优化【性能分析篇】.md

mysql uuid 主键 性能优化【性能分析篇】.mdmysql InnoDB UUID 主键 性能优化【实践篇】.md 有序uuidmysql InnoDB UUID 主键 性能优化【原理篇】.mdmysql InnoDB UUID 主键 性能优化【性能分...

北京起航 ⋅ 2015/05/22 ⋅ 1

数据库中MyISAM与InnoDB区别

数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引...

thinkyoung ⋅ 2015/09/08 ⋅ 0

数据库索引(二)聚集/非聚集索引,索引和锁

聚集索引(InnoDB,使用B+Tree作为索引结构) 在一个结构中保存了b-tree索引和数据行;按照主键的顺序存储在叶子页上; 主键索引:叶节点存储(主键数据:所有剩余列数据) 二级索引(非聚簇...

sun_tantan ⋅ 04/30 ⋅ 0

通过查看mysql 配置参数、状态来优化你的mysql

通过查看mysql 配置参数、状态来优化你的mysql mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,flush status 来查看mysql的各种性能指标。 直接...

优惠券活动 ⋅ 05/03 ⋅ 0

MyISAM 和 InnoDB 的区别有哪些?

作者:Oscarwin 链接:https://www.zhihu.com/question/20596402/answer/211492971 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 区别: 1. InnoDB支持...

xiaocao13140 ⋅ 04/20 ⋅ 0

InnoDB 存储引擎的主要知识点介绍

本文转载自:Draveness,略有修改 原文链接:『浅入浅出』MySQL 和 InnoDB · 面向信仰编程 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上...

踏雪无痕SS ⋅ 06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 17分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 29分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 今天 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部