Mysql(一)Mysql底层数据结构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql(一)Mysql底层数据结构

索引底层数据结构

mysql 底层有两种数据结构,B+Tree和Hash

B+Tree

B+树的数据结构已在文章B+树详细说明,mysql默认索引使用就是B+Tree,并且在叶子结点做了双向指针的优化

B树.png

mysql默认设置每个结点的大小为16kb,通过以下sql可查看:

SHOW GLOBAL STATUS like 'Innodb_page_size';

假设每个非叶子结点中的元素所占空间为8字节,指向子结点所占的空间占6字节,则一个结点可以存储的元素为16kb/(8b+6b)=1170个。

假设树的高度为3,叶子结点由于要存储数据,每个元素假设占1kb,则叶子结点可以存放的元素为16个,则这样的一棵高度为3的b+树可存储的数据为1170*1170*16=21907748个。大约2千万+的一张表使用3次IO便可定位到数据位置。

Hash

hash索引对索引的key进行一次hash计算就可以定位出数据存储的位置,对于只查询一条数据的情况,要比B+Tree 索引更加高效。但无法支持范围查询。这里个人的思考可以用于用户登录等业务,毕竟对于用户校验来说,不可能存在范围查询。

存储引擎

mysql一般使用两种存储引擎MyISAMInnoDB

MyISAM

MyISAM存储引擎的索引文件和数据文件是分离的(非聚集)

MyISAM.png

索引存在MYI文件中,数据存在MYD文件中。在索引文件中,构建的B+树里,叶子结点存储的是数据的磁盘地址,也就是MYD文件中数据的地址。

InnoDB

InnoDB存储引擎的数据文件本身就是B+树组织的一个索引结构文件

InnoDB.png

叶子结点存储的就是完整的数据记录。

对于非主键索引,叶子结点存储的数据是主键。这样可以节省空间和保证一致性。

联合索引

联合索引.png

查找时匹配顺序为name -> age->position,因为索引是基于name -> age->position的排序构建的。

先匹配name字段,匹配到name字段后,再匹配age字段,匹配到age字段后,再匹配posotion字段。

若不按照name -> age->position顺序查询,则索引失效。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
存储 关系型数据库 MySQL
解锁高效检索技能:掌握MySQL索引数据结构的精髓
解锁高效检索技能:掌握MySQL索引数据结构的精髓
|
4月前
|
存储 关系型数据库 MySQL
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
|
4月前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
4月前
|
存储 SQL 关系型数据库
MySQL - 深入解析MySQL索引数据结构
MySQL - 深入解析MySQL索引数据结构
|
3月前
|
存储 关系型数据库 MySQL
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
|
4月前
|
SQL 算法 关系型数据库
【MySQL】索引介绍、索引的数据结构
【MySQL】索引介绍、索引的数据结构
47 0
|
4月前
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
61 0
|
4月前
|
存储 算法 关系型数据库
MySQL索引 索引数据结构B+Tree、分类及使用、回表查询
MySQL索引 索引数据结构B+Tree、分类及使用、回表查询
168 0
|
4月前
|
算法 关系型数据库 MySQL
为什么mysql索引使用B+Tree数据结构
为什么mysql索引使用B+Tree数据结构
44 0
|
4月前
|
存储 关系型数据库 MySQL
对数据库索引的理解以及索引在MySQL中的数据结构
对数据库索引的理解以及索引在MySQL中的数据结构