type
status
date
slug
summary
tags
category
icon
password
索引是帮助 mysql高效获取数据的数据结构。
没有索引
在没有索引的情况下,会一条一条进行对比,效率比较慢。
有索引
有索引的情况,对索引字段建立一个二叉树,这样在查找数据的时候就快的多。

索引优缺点
- 优点:
- 提高数据检索的效率,降低数据库的 IO 成本,因为数据是从磁盘中加载的。
- 降低 cpu 消耗,因为检索的次数降低了

BTree 结构
上面说二叉树的可以提高效率,但形成一个合理的二叉树又很依赖插入顺序。
可以通过红黑树来解决形成链表的问题,但即使是这样,但数据量比较大的时候,还是会有很多层级,检索数据慢。

可以通过 B树来解决(多路平衡查找树)

B+树索引
它的特点是所有数据都在叶子节点中显示,这样相对于 B 树,减少了存储的键值,相对于 B 树降低了树的高度。

hahs 索引
hash 索引就是采用hash 算法,先计算出行的 hash值,再对具体字段的值计算 hash 值(比如name),在里面装入值和对应行的hash 值,如果映射到同一个hash 位置,后面可以跟上链表来解决。

hash 索引特点
- 只能用等于比较查询,因为经过使用hash计算值是随机的,不是按照顺序查询的,所以无法利用索引完成排序操作。
- 查询效率高,通常只需要一次查询就可以了,因为只需要计算 hash 值就可以查询到对应数据,经过 hash 碰撞的时候会查询多次,比 B+树效率要高。
存储引擎支持

image-20230529161248497
为什么 InnoDB 存储引擎选择了 B+tree 结构?
- 相对于二叉树(红黑树也是二叉树),层级更少,搜索效率更高。
- B 树和 B+树主要的区别在于,B树无论是叶子节点还是非叶子节点都会保存数据。这样数据多的话就会增高叶子的高度,导致性能降低。
- 相对于 hash 索引,他只支持等值匹配,不支持范围匹配