MySQL知识点复习 - 索引分类
索引
可以把书开头的目录比喻成索引,那么在数据库中,索引就可以理解为数据的目录。
索引的分类
可以按照四个角度来进行分类
- 数据结构:b+🌲、hash、full-text索引
- 物理存储:聚簇、二级索引
- 字段特性:主键、唯一、普通、前缀索引
- 字段个数:单列、联合索引
按数据结构分类
索引类型 | InnoDB | MYISAM | Memory |
---|---|---|---|
b+🌲 | ✅ | ✅ | ✅ |
hash | ❌ | ❌ | ✅ |
full-text | ✅ | ✅ | ❌ |
现在一般都用innoDB作为存储引擎,b+🌲是采用比较常见的类型。
在建表的时候,存储引擎默认会根据不同的场景选择不同的列作为索引:
- if有主键,默认选择主键作为聚簇索引的索引键
- else if 没有主键 ,就会选择第一个没有null值的唯一列作为聚簇索引的索引键
- else if 都没有,会自动生成一个隐藏起来的自增id作为索引键
创建主键索引和二级索引的默认使用的也是b+🌲索引。(其他索引都统称为辅助索引也可以叫二级索引或者是非聚簇索引。)
数据存储在b+🌲时候是什么样子的?
每个节点中的数据都是按照主键的顺序来存储的,在b+🌲的字节点中可以看到所有的索引值,每一层的父节点的索引值都会出现在下层子节点的索引值(所以可以看到所有的索引值信息),并且每个字节点都有两个指针,分别指向上一个子节点和下一个子节点(这么说这玩意就是一个双向链表)。
1. 说说根据主键查询一条信息的执行过程?
select * from m_user where id = 24
查询过程:(伪思路)
- 先将主键id = 24 跟索引数据进行比较,24 在 20~30之间,所以根据结构的逻辑,会找到第二层的索引数据20,26,28中进行查找。
- 在二层数据(20,26,28)中进行查找,因为24在20~26之间,所以就去到第三排的数据(22,23,24)
- 所以可以在第三层数据中找到24的这条数据,结果会直接跟在索引值的后面。
小结一下
b+🌲对比b🌲和二叉🌲的查询效率要高,因为即便在数据量很大的情况下对于磁盘的io也就只有3~4次。
2. 通过二级索引查询数据的过程
主键索引和二级索引的b+🌲的区别是:主键索引下存放的是真实的物理数据而二级索引下存放的是主键值。
所以如果使用二级索引来查询数据,就是先在通过这个树进行查询,找到了主键索引的值之后,再重复上面主键索引的查询操作,就可以获取到所有的数据,这个过程叫做回表,意思就是需要跑两次b+🌲。但如果在二级索引中查询的数据是可以在二级索引的🌲中找到的话,就不需要再跑一次主键索引的🌲,这个过程叫做覆盖索引。(比如直接select id from where m_user where id = ??这种情况就不会再跑一次主键索引)
done,下一篇再总结物理存储分类的索引。
OK,第二天继续总结这个知识点
按物理存储分类
从物理存储的角度进行分类可以分为:
- 聚簇索引(主键索引):跟上面说的一样,这里的叶子节点存放的是实际的数据
- 二级索引(辅助索引):这里存放的是主键值
按字段特性分类
- 主键索引
见文知义,在创建表的时候建立在主键字段上的索引,一张表只会有一个主键索引,不允许存在NULL【这跟主键的特征相似,也就是简单的可以理解为建表的时候自己设置的主键,PRIMARY KEY(xxx)】
- 唯一索引
建立在UNIQUE
的索引,一张表可以有多个唯一的索引,但是这个索引的值必须是唯一的,但是允许有NULL值
- 普通索引
没有什么特别的要求,就是单纯在创建表的时候用INDEX(xxx)的这种写法
- 前缀索引
这个索引只能用在字符类型的字段中,因为它不是建立在整个字段上的,可以理解为startwith什么的写法吗?不对不应该这样说,看了一下它的用法是INDEX(xxx(长度)),那就是说是建立在这个字段的前几个字符所建立的索引~
按字段个数分类
很好理解,建立在一列的索引上交单列索引,多列索引就叫做联合索引。
联合索引存在最左匹配原则,意思就是回按照最左优先的方式进行索引的匹配。假设创建了abc三个字段的索引,并且查询的时候是where a = 1 and b = 2 and c =3 的就能正常的走索引,但是因为mysql本身就有做过优化,所以a放在什么位置是不重要的,但是如果是where b = 2 或者是 where b = 2 and c = 3,那么这个联合索引是会失效的,它并没有遵循最左匹配原则。
原文地址:https://blog.csdn.net/weixin_42035397/article/details/142463317
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!