mysql学习
2019-12-16 10:57:39 0 举报
AI智能生成
mysql知识体系
作者其他创作
大纲/内容
mysql索引
索引作用
帮助mysql高效获取数据的排好序的数据结构
几种数据结构
二叉树
特点
每个节点有两个子节点
左子节点数据小于父节点,右子节点数据大于父节点
不采用原因:可能会存在单边二叉树
红黑树
特点
节点为红色或者黑色
根节点为黑色
叶子节点为黑色
节点为nil
每个红色节点的叶子节点为黑色
不采用原因:数据量较大时树的高度会非常深;且在插入时要做自旋等操作
Hash表
特点
不采用原因:范围查找时索引失效
BTree
特点
叶子节点具有相同的深度
叶子节点指针为空
节点中的数据索引从左到右递增排列
B+Tree
特点
BTree变种
非叶子节点不存储数据、只存储索引(可以放更多的索引)
叶子节点不存储指针
顺序访问指针,提高区间访问能力
mysql改造叶子节点,各叶子节点之间设置了双向指针(解决了范围查找问题)
存储引擎
InnoDb存储引擎
frm文件
存放表结构及定义信息
ibd文件
存放B+数结构及数据
必须有主键
如果没有人工创建主键
mysql会从数据记录中找到一个能够代表主键的属性
如果找不到,则msyql自动创建一个索引(类似oracle rowid)
建议使用整型自增主键索引
可以直接在叶子节点进行添加,避免B+分裂
例如:uuid,则插入时需要不断比较大小(转为ascii码)
MyISAM存储引擎
frm文件
存放表结构及定义信息
myd
存放表中所有数据行
myi
存放索引
叶子节点存放的数据为数据在磁盘上的地址指针
mysql节点大小
通过:show global status like 'innodb_page_size';
返回值:16384,即16K = 2^16
返回值:16384,即16K = 2^16
每个索引元素大小为:8Byte(索引)+6Byte(指针)
所以每个节点可存储的数据量为:16k/14 = 1170
数据不存储在非叶子节点(可存储更多索引)
0 条评论
下一页
为你推荐
查看更多