
mysql底层原理(索引)
发布日期:2021-05-10 16:10:49
浏览次数:12
分类:精选文章
本文共 832 字,大约阅读时间需要 2 分钟。
注:数据库引擎包括innodb,myisam,本篇主要针对innodb
一、底层数据结构
innodb数据库索引数据结构为B+Tree
我们查看数据文件存储位置
#登录数据库,进行查询SHOW VARIABLES LIKE '%datadir%'
例如:我的mybatis_example库t_user表文件结构(t_user为innodb,可以看到只有一个文件:t_user.frm)
t_user.frm的数据结构就是一棵索引树,最底下是表中存储的数据
特点
- 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
- 叶子节点包含所有索引字段
- 叶子节点之间用双向指针连接,提高区间访问的性能
下图为B+Tree结构
以上为主节索引树结构,而普通索引或者二级索引则为下图(底层叶子节点存储的是主键索引)
二、索引页
通俗来讲:计算机有磁盘预读功能,索引加载进内存,大小为16kb,我们称为mysql的索引页。
索引,总量大小固定,我们在创建表类型的时候,就要考虑数据类型,int占4byte,bigint占8byte,varchar字符串就比较占空间,所以建议主键索引为数字类型
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
考虑到,m层b+tree 每个节点最多m个节点,最少有m/2向上取整个节点,如果索引不是连续的,在删除和修改数据的时候,就要重构树结构,影响性能。
所以我们建议 ,索引最好是连续的。
索引页的大小也让我们考虑不用红黑树或者二叉树,每层只有两个索引值存,那样会增大树的高度,影响效率;
注:以上为本人总结,如有错误之处,望不吝指出,非常感谢!
如果对您起到了一点点帮助,请给予我一点鼓励,在下方点个小小的赞,谢谢
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月20日 23时50分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
排除Transformation Errors
2021-05-10
错误总结
2021-05-10
如何使用linux系统自带的led驱动
2021-05-10
泛知识类视频会改变短视频行业格局吗?
2021-05-10
IP-Guard回收客户端加密授权,已经加密的文档如何解密
2021-05-10
IP-GUARD支持的数据库版本
2021-05-10
ip-guard加密在OFFICE文档里插入图片提示错误
2021-05-10
a*算法伪代码及实现
2021-05-10
第十一节 IO编程
2021-05-10
十八、flask之g对象
2021-05-10
GIT学习笔记
2021-05-10
Linux系统调用过程
2021-05-10
stm32 uv5打开uv4工程错误
2021-05-10
mysql怎么终止一个事务_MySql 中游标,事务,终止存储过程方法总结
2021-05-10
SmartRefreshLayout 上拉加载下拉刷新
2021-05-10
app:processDevDebugResources
2021-05-10
最基础的urllib.request.urlopen()基本使用
2021-05-10
C# 异常
2021-05-10
vs 设置静态库输出路径
2021-05-10