索引
2021-12-01 16:07:45 0 举报
AI智能生成
索引
作者其他创作
大纲/内容
磁盘上数据页的存储结构
数据页之间通过指针,组成双向链表
数据页内的数据行是按主键从小到大组成单向链表
页目录
主键和槽位的映射
页分裂
在新增数据的时候,下一个页的数据主键要比上一个页的大
如果主键设置自增,可以保证
如果是自定义主键,如果新增的数据比上一页的数据主键小,那么就会交换位置,保证顺序,这就是页分裂
B+树
索引页
表的实际数据存放在数据页中,表的索引也是存放在页中的,就是索引页
索引条目
主键索引页中,包含很多索引条目,每个索引条目里有索引页的页号和索引页中的最小主键值
把索引页组成B+树
B+树,每个节点可以有很多子节点
从B+树的顶层开始二分查找,在顶层的索引页中,对立面的所有最小主键值进行二分查找
没有找到,就一层一层往下定位,最终定位到一个数据页里,在数据页内部的目录里对数据主键进行二分查找,找到那条数据
最下层的索引页
最下层的索引页,有指向数据页的指针;索引页之间通过指针组成双向链表
聚簇索引(主键索引)
在B+树种,最底层的叶子节点是数据页。索引页+数据页组成的B+树
最下层索引页中,是一组主键目录,包含数据页页号和数据页的最小主键
在innodb中,对数据的增删改,就是直接把数据页放在聚簇索引中,数据就在聚簇索引里
聚簇索引默认按照主键组织,增删改的时候,一方面更新数据页,一方面自动维护B+树结构的聚簇索引
页分裂
页分裂的时候,会调整各个数据页内部的行数据,保证数据页中的主键值都是有顺序的,下一个数据页的所有主键值大于上一个数据页的所有主键值,还会维护上层索引数据结构,在上层索引页里维护索引条目。如果数据页太多,一个索引页放不下,就会生成新的索引页,同时生成一个上层的索引页,上层索引页中的索引条目就是下层索引页页号和最小主键值。
除了主键索引之外的二级索引
单一索引
重新根据索引字段建立一个B+树,叶子节也是数据页,不过这个数据页中只放主键和该索引字段,然后根据索引字段排序
查到主键后,再去聚簇索引的B+树查所有的数据
索引页中除了放索引页号和索引字段值,还放主键,因为新增的时候,索引字段值可能重复,用主键判断,放主键大的索引页中
组合索引
数据页中放主键和组合索引的字段
先根据第一个字段排序,相同的再根据第二个字段排序
维护索引
增删改,除了更新数据页中的数据,还会维护所有的B+树
联合索引查询原理以及索引规则
联合索引查询原理
依次根据各个字段进行二分查找
全值匹配规则
where 条件都是基于等值来查询
字段要和联合索引一致,顺序不一致,MySQL会优化按联合索引的顺序搜索
最左侧列匹配原则
where 条件字段,按照最左则规则,字段可以不都写,但是最左侧的字段要有
最左前缀匹配原则
用 like 语法 ,模糊查询,只有like'*%' 才会走索引
因为是按照最左边排序,没有最左则没法查找
范围查找规则
where name > '11' and name < '55',会走索引
因为索引页最下层的数据页是按顺序组成双向链表的,找到两个点,取中的数据就行
只有最左则的列,才能用范围查找
等值匹配 + 范围查找
最左侧的列用等值,然后下一个列用范围,可以走索引
order by、group 使用索引
order by 1,2,3
建立排序字段的联合索引
所有字段要么都升序,要么都降序
排序字段不能使用复杂函数
group 同理
收藏
0 条评论
下一页