关于 Mysql innodb的索引

关于InnoDB的索引,可以分为聚簇索引,辅助索引,都是以B+Tree 为底层数据结构。

聚簇索引 只是数据的存储方法。以主键为key,如果表中没有主键,则会选择一个有唯一索引的列作为key,如果都没有,innodb会为我们创建一个唯一列作为key。所有的数据都存在叶子节点上,并且是按顺序存储的。如果我们的主键插入的数据都是随机的,就可能会导致多个页分列。从而影响插入的效率。

而辅助索引也称为普通索引,二级索引。它的叶节点只存了主键的值。我们通常说的索引更多的就是指它了。在查询时每张表只能使用一个索引,如果有一个多列的大数据查询,这个时候就需要有一个多列索引来帮我们提高查询效率,尤其是查询中包含排序,分组时。在建多列索引时需要考虑以下一些因素:

1,尽可能让索引覆盖更多地列,尤其是排序分组字段。

2,让选择性更好的列放在第一位。

3,索引尽可能保持一个通用性(其他查询也能用到)。

4,如果索引中某个列是范围查询,那么索引后面的字段是用不上的。

5,如果在某个字段上用了函数方法(如日期处理),则这个字段也是走不了索引的。

我们都知道索引可以提高查询的速度,那么索引是不是越多越好呢?肯定不是,主要有俩点:

1,索引太多会影响数据更新的速度。

2,索引太多会需要更大的存储空间。

B+树
B+树是由B树发展而来,主要用于文件索引系统,因为它可以减少磁盘IO的次数。
关于 Mysql innodb的索引_第1张图片
他有以下一些特点:
1.非叶子结点的子树指针与关键字个数相同;
2.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
3.为所有叶子结点增加一个链指针(这样在范围查找时效率更高);
4.所有关键字都在叶子结点出现;
B+树的复杂度为 O(log d N) 以d为底, d为度。网上很多直接写logN。

你可能感兴趣的:(学习总结)