1、索引的定义:索引是帮助MySql高效获取数据的
排序好的
数据结构。
2、索引存储在文件里
3、索引结构
-
二叉树
-
红黑树
-
HASH
-
BTREE
图解本质
4、B-Tree(B减树也叫B树)
-
度-节点的数据存储个数
-
叶节点具有相同的深度
-
叶结点指针为空
-
节点中的数据key从左到右递增排列
5、B+Tree(B-Tree的变种)
-
非叶子节点不存储data,只存储key, 可以增大度
-
叶子节点不存储指针
-
顺序访问指针,提高区间访问呢的性能。
好处:
-
因为索引加载到内存中,通过在内存中查找对应索引更快。
-
每一个节点可以存储1170个元素,这样能减小树的深度的遍历。
6、InnoDB等数据库引擎是针对
表的,不是针对数据库的。
7、
MyISAM索引底层数据结构与算法
-
frm创建表的框架文件。
-
MYD表数据文件
-
MYI表索引文件(磁盘上的)
-
8、InnoDB索引实现( 聚集【
聚集:表数据文件和表索引文件在一起、
非聚集:表数据文件和表索引文件不在一起】)
-
表数据文件本身就是按照B+Tree组织的一个索引结构
-
聚集索引-叶子节点包含了完整了数据记录
左:InnoDB引擎
-
为什么InnoDB表必须有主键 ,并且推荐使用整型自增长?
-
因为InnoDB是通过主键进行 索引,如果没有会为其创建一个。
-
相对于uuid(字符串),字符串比较需要转换成ASCII码,比较要比整形耗时,而且字符串所占内存空间大。
-
因为B+树在节点中间插入会导致 分裂,如果直接使用主键自增,则避免分裂耗时。
-
-
B+树叶子节点的指针有什么用?
-
分裂时用来连接两个节点
-
相对于Hash方式存储,如果是范围内查找(>\<),HASH并不适用。
-
而B+树自带指针,如果查找大于,直接在其节点指针右边即可 。
-
-
为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省 存储空间)
-
因为InnoDB是通过主键进行 索引,如果没有会为其创建一个。
-
相对于uuid(字符串),字符串比较需要转换成ASCII码,比较要比整形耗时,而且字符串所占内存空间大
-