从小林索引篇开始......

1.索引的分类

按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
按「字段个数」分类:单列索引、联合索引。

讲几个自己熟悉的:
1)B+树索引:a.叶子节点储存全部信息;b.查询的io效率很高
2)聚簇索引:把主键值作为索引;叶子节点包括全部信息
3)二级索引:该索引的B+树结构,只包含主键的值(回表概念)
4)覆盖索引:如果查询的数据能在二级索引里查询的到,那么就不需要回表,这个过程就是覆盖索引
5)联合索引:把多个字段合并成索引,知识点:a.联合查询失效;b.最左匹配原则

为什么使用B+树?

二分查找:O(logn),但每次都要计算中间位置的值
二分查找树:一般情况下也是O(logn),最坏O(n):就是一直插入最大值或者最小值,而且还有很高的树高
平衡二叉树:O(logn)但是还是有树高
B树
B+树:O(logdN),其中 d 表示节点允许的最大子节点个数为 d 个

对比

B+Tree vs B Tree

1)B+Tree 只在叶子节点存储数据,而 B 树 的非叶子节点也要存储数据,所以 B+Tree 的单个节点的数据量更小,在相同的磁盘 I/O 次数下,就能查询更多的节点。
2)另外,B+Tree 叶子节点采用的是双链表连接,适合 MySQL 中常见的基于范围的顺序查找,而 B 树无法做到这一点。

主键索引就是建立在主键字段上的索引,通常在创建表的时候一起创建,一张表最多只有一个主键索引,索引列的值不允许有空值。
唯一索引建立在 UNIQUE 字段上的索引,一张表可以有多个唯一索引,索引列的值必须唯一,但是允许有空值。
普通索引就是建立在普通字段上的索引,既不要求字段为主键,也不要求字段为 UNIQUE。

联合索引的查询范围

我的总结就是:

在条件中没有同时等于的情况下,联合索引就会失效。
联合索引的最左匹配原则,在遇到范围查询(如 >、<)的时候,就会停止匹配,也就是范围查询的字段可以用到联合索引,但是在范围查询字段的后面的字段无法用到联合索引。注意,对于 >=、<=、BETWEEN、like 前缀匹配的范围查询,并不会停止匹配,前面我也用了四个例子说明了。

索引下推

索引下推优化(index condition pushdown), 可以在联合索引遍历过程中,对联合索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

索引区分度

从小林索引篇开始......_第1张图片
例如:性别的区分度就很小,不适合建立索引或不适合排在联合索引列的靠前的位置


然后就是他总结的一些东西了:
从小林索引篇开始......_第2张图片

你可能感兴趣的:(mysql)