Mysql(一)Mysql底层数据结构

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,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顺序查询,则索引失效。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 关系型数据库 MySQL
解锁高效检索技能:掌握MySQL索引数据结构的精髓
解锁高效检索技能:掌握MySQL索引数据结构的精髓
287 0
|
存储 关系型数据库 MySQL
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
185 0
|
9月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
241 4
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
存储 SQL 关系型数据库
MySQL - 深入解析MySQL索引数据结构
MySQL - 深入解析MySQL索引数据结构
308 0
|
存储 关系型数据库 MySQL
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
|
SQL 算法 关系型数据库
【MySQL】索引介绍、索引的数据结构
【MySQL】索引介绍、索引的数据结构
240 0
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
|
算法 关系型数据库 MySQL
为什么mysql索引使用B+Tree数据结构
为什么mysql索引使用B+Tree数据结构
177 0
|
存储 关系型数据库 MySQL
对数据库索引的理解以及索引在MySQL中的数据结构
对数据库索引的理解以及索引在MySQL中的数据结构

热门文章

最新文章

推荐镜像

更多