mysql-索引
2025-4-20
| 2025-4-20
Words 710Read Time 2 min
type
status
date
slug
summary
tags
category
icon
password
索引是帮助 mysql高效获取数据的数据结构。

没有索引

在没有索引的情况下,会一条一条进行对比,效率比较慢。

有索引

有索引的情况,对索引字段建立一个二叉树,这样在查找数据的时候就快的多。
notion image

索引优缺点

  • 优点:
    • 提高数据检索的效率,降低数据库的 IO 成本,因为数据是从磁盘中加载的。
    • 降低 cpu 消耗,因为检索的次数降低了
  • 缺点:
    • 建立索引也会消耗空间
    • 虽然提高了索引效率,但是会降低更新语句,因为更改,删除,添加时都要对索引结构进行维护
    • mysql 索引数据结构

      主流使用的是 B+树索引

notion image

BTree 结构

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

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

notion image

B+树索引

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

hahs 索引

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

hash 索引特点

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

存储引擎支持

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