irpas技术客

【Mysql篇】索引是什么?索引的底层模型是什么?索引失效场景以及失效的原理_爱吃鱼饼的猫

网络 1929

目录 索引1. 索引是什么2. 索引的优点(加快查询效率)3. 索引的缺点(占用空间、更新变慢)4. 索引的类型1. hash2. 平衡二叉树AVL1. 定义2. 问题 3. B树1. 定义2. 特点 3. B+树(mysql索引推荐的存储结构)1. 定义2. 特点 5. 索引的种类1. 聚集索引(如主键索引、唯一的隐式非空索引)1. 定义(数据和索引放到一起) 2. 非聚集索引(数据和索引分开)3. 联合索引 6. 什么时候需要创建索引7. 什么时候不需要创建索引8. 哪些情况会不走索引9. 主键和索引的区别10. 索引失效的原理1. 联合索引为什么会失效

索引 1. 索引是什么

索引是一种优化查询的数据结构,是表的一部分,记录这表里所有记录的引用指针,可以理解为一本书的目录

2. 索引的优点(加快查询效率) 查询效率变快唯一索引可以保证数据行的唯一性加速表与表之间的连接在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间 3. 索引的缺点(占用空间、更新变慢) 创建索引和维护索引需要时间,随数据量的增加而增加索引占用空间更新数据的同时会更新索引,降低了更新的速度 4. 索引的类型 1. hash

HASH的唯一(几乎100%的唯一)及类似键值对的形式,特点:“=”和“in”条件下高效,对于范围查询、排序效率不高

2. 平衡二叉树AVL 1. 定义

左子树和右子树的高度差不会超过1(通过左旋右旋来实现的)

2. 问题 随着数据量的增加,数的高度会越高,查询的效率会变慢对于范围查询,需要用到回溯算法进行查找,效率特别慢 3. B树 1. 定义

每个节点最多可以存放2个数据,从而降低了树的高度,但对于范围查询还是需要回溯的

2. 特点 每个节点都存储指针和data,所有节点组成这棵树叶子节点指针为null 图片链接:https://blog.csdn.net/qq_35529931/article/details/88925462 3. B+树(mysql索引推荐的存储结构) 1. 定义

一个节点存放2个值,叶子节点冗余存放数据,且根据从小到大形成一个单向链表

2. 特点 只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针其他节点只存储指针,不存data叶子节点还增加了顺序访问的指针 图片链接:https://blog.csdn.net/qq_35529931/article/details/88925462 5. 索引的种类 1. 聚集索引(如主键索引、唯一的隐式非空索引) 1. 定义(数据和索引放到一起)

在数据库里面,所有行数都会按照主键索引进行排序,一张表就只有一个聚集索引。

白话文:可以没有主键索引,但一定会有聚集索引

2. 非聚集索引(数据和索引分开)

就是给普通字段加上索引。

3. 联合索引

就是好几个字段组成的索引,称为联合索引。 联合索引遵从最左前缀原则

6. 什么时候需要创建索引

主键自动建立唯一索引(ID)

频繁作为查询条件的字段应该创建索引、一般创建联合索引(Where)

查询中排序的字段创建索引将大大提高排序的速度(Order By)

查询中统计或者分组的字段(Group By)

7. 什么时候不需要创建索引 频繁更新的字段不适合创建索引where条件里用不到的字段,不创建索引表记录太少,不需要创建索引数据离散度小的字段,不需要创建索引,例如性别 8. 哪些情况会不走索引 Like:%在前面的话不走索引,%在后面的话还是会走索引的索引列有计算操作,不走索引索引列使用了函数,不走索引索引列使用了不等(!=)符号,不走索引不满足联合索引的最左前缀原则,不走索引or操作,不走索引(可以用union替代)索引列的字段具体值为null,不走索引,进行全表扫描(很关键)字符串列与数字直接比较,字段属性是字符,但是你用数据类型去比较,不走索引(因为隐式类型转换,mysql5.7之后是可以使用到索引的)order by操作的索引列如果也在where条件里,则不走索引对于联合索引,范围查询如between、>、< 这些条件,会造成后面的索引字段失效 9. 主键和索引的区别

主键一定是唯一索引,唯一索引并不一定就是主键。

一个表中可以有多个唯一性索引,但只能有一个主键。

主键列不允许为null,唯一性索引列允许为null

10. 索引失效的原理

1. 联合索引为什么会失效

比如联合索引是A,B,C,生成的B+树的那个单向链表,是先根据A排序,A相同的再根据B排序,以此类推


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #目录索引1 #索引是什么2 #索引的优点加快查询效率3 #索引的缺点占用空间更新变慢4 #索引的类型1 #hash2 #平衡二叉树AVL1