0
点赞
收藏
分享

微信扫一扫

MySQL基础-索引原理

哈哈镜6567 2022-01-28 阅读 77

索引

索引的常见模型

哈希:只能做等值查询,无法做区间查询
有序数组:可以做取件查询,适合存静态数据(不在中间增删)
平衡二叉树:树高太高,每次访问一个节点都相当于第一次硬盘
N叉树:InnoDB 为例,这个 N 差不多是 1200。这棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了。

主键索引与非主键索引

在 InnoDB 里,主键索引也被称为聚簇索引(clustered index),非主键索引也被称为二级索引(secondary index)。

主键索引的叶子节点存的是整行数据。非主键索引的叶子节点内容是主键的值
所以如果使用非主键索引进行查询,查出来的只是主键的值,还会再对主键索引进行一次查询,我们要尽量直接使用主键索引查询。

索引维护

页分裂、页合并

B+树为了维护索引的有序性,插入/删除新值时会对树进行必要的维护。

页分裂:一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降,空间利用率降低大概50%。
页合并:当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。

自增主键的使用场景

1)主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小
2)业务字段做主键场景:1:只有一个索引 2:该索引必须是唯一索引 这是典型的kv场景
由于没有其他索引,故不用考虑其它索引叶子节点大小的问题,故将该值设为主键索引

举报

相关推荐

0 条评论