DBA-70-day05


第五章 MySQL 基础优化-索引及执行计划

1. 什么是索引?

相当于一本书中的目录。优化查询。

2. MySQL 支持的索引类型(算法)

Btree    : 平衡多叉树

Rtree    :空间树所以

Hash    :HASH索引

Fulltext :全文索引

3. 数据查找算法介绍

二叉树

红黑树

Btree : Balance Ttree

4. Btree的查找算法(见图)

B-tree

B+tree

B*tree

5. MySQL Btree索引的应用

5.1 聚簇索引(聚集索引、主键索引)

前提:

0. InnoDB存储引擎的表才会有聚簇索引。

1. 有主键,主键就是聚簇索引

2. 没有主键,选择唯一键作为聚簇索引

3. 生成一个隐藏列(DB_ROW_ID,6字节),作为聚簇索引

作用:

1. 聚簇(区)索引,组织表(IOT): 所有数据在插入时,都按照ID(主键)属性,在相邻数据页上有序存储数据。

2. 加快存储数据,加快通过索引作为查找条件的查询。

参考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html

聚簇索引构建过程(见图)

1. 叶子节点 :

由于存储数据时,已经按照ID顺序在各个数据页中有序存储了,所以《原表数据》所在数据页被作为叶子节点。

2. 内部节点(非叶子节点):

  获取叶子节点ID范围+指针。

3. 根节点:

  获取非叶子节点 ID范围+指针

5.2 辅助索引(见图)

构建过程:

1. 叶子节点构建:

提取索引列值+ID ,进行从小到大排序(辅助索引列值),存储到各个数据页,作为Leaf node。

2. 非叶子节点(internel node )

提取下层的辅助索引列值范围+指针。

    3. 根节点:

提取下层节点的范围+指针。

对于查询的优化:

1. 通过辅助索引列,进行条件查询,根据辅助索引BTREE快速锁定条件值对应的ID。

2. 通过得出的ID值,回到聚簇索引继续查询到具体的数据行(回表)。

6. 辅助索引分类

6.1. 普通单列

6.2. 联合索引

idx(a,b)

叶子节点: 

id+a+b ,按照a和b进行排序,生成叶子节点

枝节点和根节点:

只会包含最左列(a列)的范围+指针

    注意: 最左原则

1. 建索引,最左列重复值少的。

2. 查询条件中,必须包含最左列。

6.3. 唯一索引

unique key

6.4. 前缀索引

idex(test(10))

7. 索引树高度影响因素

3.1 列值长度

前缀索引。

3.2 数据量

分区表 。

定期归档表。

分布式架构:分库、分表。

3.3 数据类型

char(20) 

varchar(20)

8. 回表问题的探讨?

什么是回表?

辅助索引查找完成----》 聚簇索引查询过程。

回表会带来的问题?

IO增多: 量、次数

如何减少回表 ?

使用唯一值索引查询

联合索引

覆盖索引:辅助索引完全覆盖到查询结果

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。