MySQL-第四章 索引及执行计划管理

1.索引的作用

类似于一本书的目录,气到优化查询的功能

2.索引类型

BTREE索引
RTREE索引
HASH索引
FULLTEXT(全文)索引

3.BTREE的细分类(算法)

B-TREE
B+TREE
B*TREE

4. Btree索引的功能分类

聚集索引(集群索引)
辅助索引(二级索引)

5. B树是如何创建的

辅助索引:

1)将name列的所有值取出来,进行自动排序
2)将排完序的值均匀的落在16kb叶子节点数据页中,并将索引键值所对应的数据行的聚集索引的列值
3)向上生成枝节点和根节点

聚集索引(IOT)

1)默认是按照主键生成聚集索引,没有主键,存储殷勤会使用唯一键,如果都没有,会生成隐藏的聚集索引。
2)数据在存储时,就会按照聚集索引的顺序存储到磁盘的数据页。
3)有雨本身的数据就是有序的,所以聚集索引构建是时,就不需要排序
4)聚集索引直接将磁盘的数据页,作为叶子节点
5)枝节点和根节点只会调取下层节点主键的最小值

6.辅助索引和聚集索引的区别

1)辅助索引:

叶子结点只保存主键值+索引键值的有序存储
对索引键值会自动排序
需要手工创建
辅助索引可以有多个
任何列都可以创建

2)聚集索引

只能在主键列生成,唯一且非空
数据存储时,就是按照聚集索引顺序进行有序存储
叶子节点不需要单独生成

7.辅助索引细分

单列辅助索引

  select * from ti where name=''

联合索引

  select * from t1 where a and b and c 

唯一索引

8.索引树 的高度(越低越好)

8.1表的数据量级大

了解:分区表
分库分表(分布式架构)

8.2 索引键值的长度

1)尽可能选择列值短的列创建索引
2)采用前缀索引

8.3数据类型的选择

char 和 varchar
enum

9.索引管理

9.0 压力测试准备

10.explain(desc) 工具

desc select * from test.t100w where k2='cdHI';
#或者
explain select * from test.t100w where k2='cdHI';
#执行一样

作用:
抓取优化器优化过的执行计划

10.1执行计划分析

mysql[test]>desc select * from test.t100w where k2='cdHI';


MySQL-第四章 索引及执行计划管理_第1张图片
???

table:以上SQL语句设计的表
type:查询的类型(全表扫描,索引扫描,查不到数据
possible_keys:可能用到的索引
key:使用到的索引
key_len:索引的覆盖长度
extra:额外的信息

10.2详细说明

10.2.1

ALL:全表扫描,不会走任何索引
1)查询条件,没建索引
2)有索引不走

10.2.2index 全索引扫描
mysql[test]>desc select k2 from t100w;
+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys | key    | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | t100w | NULL       | index | NULL          | idx_kd | 17      | NULL | 997665 |   100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

=========从染个开始,我们才认为索引是有价值的===

10.2.3.range索引范围查询

辅助索引:
< , >, >=, <= , like, between an
in() , or
聚集索引:
!=,not in

ref:辅助索引等值查询
ref_eq:多表链接查询中,非驱动表on的条件列是主键或者唯一键
const(system):主键或唯一键的等值
NULL:获取不到数据

10.2.4

你可能感兴趣的:(MySQL-第四章 索引及执行计划管理)