深入理解mysql索引底层数据结构与算法
2023-07-03 11:51:34 1 举报
深入理解mysql索引底层数据结构与算法
作者其他创作
大纲/内容
索引的本质:索引是帮助MySQL高效获取数据的排好序的数据结构
索引的数据结构有
二叉树-对于单边增长的列,二叉树会变成链表并没有简化查询
红黑树-日常使用树的高度会过高,查询叶子结点数据也会多次磁盘io
Hash表-某一列设置成hash索引,对索引进行一次hash运算就能定位数据位置,有时候比b+树更高效,缺点:只能满足"=",不支持范围查询,hash冲突问题
B-Tree-叶节点具有相同的深度,索引元素不重复,节点为key-value结构,节点中的数据索引从左到右递增排列,叶子结点没有指针,范围查找效率低,要从叶子结点返回根节点找
B+Tree-非叶子结点不存储数据data,只存储索引(冗余),叶子结点包含所有的索引,叶子结点之间用指针连接,依次新增,提高区间访问性能,
Mysql Innodb_page_size = 16384byte = 16kb,一次磁盘io加载一页数据到内存(耗费时间)
常识问题之存储引擎是形容数据库的还是形容数据库表的?形容数据库表的
MyISAM存储引擎索引文件和数据文件是分离的(非聚集),MYI索引文件叶子节点存放的,是索引行在MYD数据文件的磁盘地址
Innodb存储引擎,表数据文件本身就是按B+Tree组织的一个索引结构文件(主键索引),聚集索引-叶子节点包含了完整的数据记录
面试题-为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?
不创建主键,mysql会从第一列开始找一列数据都不一样的作为索引数据组织B+Tree,找不到会维护一列隐藏列,消耗mysql资源
uuid比较大小效率低,占位大,整型比较快,占位小,
聚集索引和非聚集索引查找谁快?非聚集跨文件,效率低
为什么非主键索引结构叶子结点存储的是主键值?(一致性和节省存储空间)
联合索引-最左前缀原理
0 条评论
下一页