简介: 来说说索引吧
目的:为了加快数据库的数据查找速度,索引应用而生
基础知识
基本定义
1 遍历 所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
3 深度 节点的层数
4 NX树 宽度定义为具有最多结点数的层中包含的结点数。
数据模型的选择
目的 为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据库
1 让树容纳更多的子节点,也即是N叉数,N 叉树中的N取决于数据块的大小
2 N 叉树由于在读写上的性能优点,以及适配磁盘的访问模式,已经在数据库中广泛应用了
问题系列
1 为什么mysql提倡使用自增主键
1 自增主键是顺序插入,不会引起页分裂,减少索引维护成本
2 自增主键int类型越短,普通索引的叶子节点就越小,普通索引占用的空间也就越小
3 采用pt-osc操作int自增主键类型的速度远远大于非自增长主键
2 innodb为什么采用B+数索引
关于B+树你要知道的
1 B+树是平衡多路查找树
2 B+树是多路查找树,一个节点能放n个值,n = 16K / 每个索引值的大小。
3 B+树的路数为n+1,n是每个节点存在的值数量,例如每个节点存放16个值,那么这棵树就是17路。
4 B+树索引并不能找到一个给定键值的具体行。B+树只能找到存放数据行的具体页,然后把页读入到内存中,再在内存中查找指定的数据
总结B+数能容纳更多的节点,存储更多的key,并且只有叶子节点存储data. 减少了磁盘IO的交互次数,提高了效率,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
3 innodb的索引存储形式
1 innodb每个索引都自己维护一个B+数索引
2 主键索引的叶子节点包含data域,非主键索引的叶子节点对应的是主键值
select * from b where id= 直接搜索id的B+数
select * from b where k= 根据K先查询查询K的B+数,活的相应的主键,再到主键维护的B+数上寻找对应的数据