04|深入浅出索引(上) | 八九. | 思维导图(新) | ProcessOn
密码:VyY9
- 简单概念
索引的出现其实就是为了提高数据查新的效率,就像书的目录一样。 - 索引的常见模型
- 搜索树
mysql用到的是B+树 - 有序数组
有序查询在 等值查询和范围查询场景中的性能就都非常优秀
类似于数据的机构,查询就会很快,但是新增的时候就会比较慢所以有序数组只适用于静态存储引擎
数据不会发生变化的数据适合 - 哈希表
这个就是类似于hashmap的原理相类似
哈希表这种数据结构适用于只有 等值查询的场景优点:增加数据时候,速度快,只需要在后面做追加
缺点:不是有序的,所以哈希索引做区间查询(就是范围查询,比如 in(12,14,15))的是书读会很慢
- 搜索树
-
InnoDB的索引模型
-
使用b+树,每一个索引在innodb里面对应一颗B+树
-
索引的类型
-
主键索引(聚簇索引) 数据和索引是在一起的
-
非主键索引(非聚簇索引) 也称为二级索引:即数据和索引的不放在一起
-
-
索引维护
-
主键自增与主键非自增
-
如果用自增主键,就是在递增数据的时候在最下面那行直接自动添加数据
如果用非自增主键,主键的值就需要我们自己手动添加(不如身份证号) -
主键的长度,我们还需要考虑到主键的回表操作,
每个二级索引使用回表时,我们所用的就是主键
显然:主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间就越小
-
-
-
扩展
-
B+树叶子节点存的是page页,一个页里面可以存多个行
-
如果插入的数据在主键树叶子节点的中间,后面的所有页如果都是满的状态,不会造成后面的每一页进行页分裂
-
插入数据如果在某个数据满了页的首位,为了减少数据移动和页分裂,会先去前后两个页看啊可能是否满了,如果没满会先将数据放到前后两个页上
-
-