mysql设置id值为索引值_MySQL 索引

本文详细介绍了MySQL索引的种类、应用,包括B树、Hash、R树、Full text和GIS索引,重点关注BTree在聚簇和辅助索引中的作用。讨论了索引的创建、管理操作,以及如何通过优化器选择最佳执行计划。此外,还分享了索引的使用原则、常见不走索引的情况以及8.0版本的新特性。最后,探讨了多表连接的优化策略,强调了驱动表选择的重要性。
摘要由CSDN通过智能技术生成

一、索引作用

提供了类似于书中目录的作用,目的是为了优化查询

(一)、索引种类

1、B树索引(Balance Tree)

作用

Btree的设计理念,就是让查询能够快速锁定范围,特别适合于范围查询。

种类

B树

B+树 相邻叶子节点上有双向指针

B*树 相邻非叶子节点上有双向指针

构建过程

1、数据排序

2、排序后的结构,均匀的落在各个leaf节点上

3、下层提取leaf节点的范围+指针构成No-leaf节点

5、下层提取No-leaf节点范围+指针构成root节点

2、Hash索引

3、R树

4、Full text

5、GIS

(二)、BTREE在MySQL中的应用

聚簇索引

1. 前提

a. 建表时有主键,主键选择为聚簇索引

b.没有主键,选唯一

c.都没有,生成6字节隐藏索引

建议:使用数字自增列创建为主键

2. 功能

a录入数据时,按照聚簇索引组织存储数据, 在磁盘上有序存储数据行

在一个区中,数据行从逻辑到物理都是有序的。

b. 加速查询

where id条件

辅助索引回表查询

3. 构建过程

a.Leaf节点:整表数据行所在的数据页

b. No-Leaf节点: 下层叶子节点ID范围+指针

c. ROOT节点:下层No-Leaf节点ID范围+指针

辅助索引

1. 前提

需要按照查询条件创建合理的辅助索引

2. 功能

加速查询:利用辅助索引作为查询条件是才能加速

3. 构建过程

a.Leaf节点:索引键值+主键ID,根据索引键值排序后生成

b. No-Leaf节点: 下层叶子节点键值范围+指针

c. ROOT节点:下层No-Leaf节点键值范围+指针

回表

查询完辅助索引之后,得到主键值,回聚簇索引树查询。

联合索引

联合索引应用要满足最左原则

1、联合索引构建:idx(a,b,c)

叶子结点

1. 提取a,b,c+id

2. 按照a,b,c进行排序

3. 生成叶子节点

枝节点

1.提取最左列的范围+指针

根节点

提取枝节点范围+指针

2、联合索引建立规范

a. 建立联合索引时,选择重复值最少的列作为最左列。

b. 使用联合索引时,查询条件中,必须包含最左列,才有可能应用到联合索引

3、索引应用注意问题

回表

影响:

IO量增多

IO次数增多(IOPS)

随机IO增多

减少方法:

使用联合索引联合索引

精细化查询条件

尽量使用唯一值多的列作为查询条件,并建立索引

优化器:MRR(Multi-Range-Read)

查看所有优化器

select @@optimizer_switch;

设置优化器状态

set global optimizer_switch='mrr=on';

功能:

1. 辅助索引查找后得到ID值,进行自动排序

2. 一次性回表,很有可能受到B+TREE中的双向指针的优化查找。

索引树高度

1、数据行

分表、归档、分布式

2、索引列值长度

前缀索引(字符串列)

3、主键过长

主键最好使

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值