mysql-索引

目录

聚簇索引

非聚簇索引

覆盖索引

回表查询

前缀索引

联合索引查询规则

联合索引排序

联合索引分组

索引的创建

索引创建规则


聚簇索引

B+树索引数据结构里,叶子节点就是数据页自己本身,那么此时我们就可以称这颗B+树索引为聚簇索引,聚簇索引默认是按照主键来组织

主键索引(叶子节点存放的是,数据页,然后根据 数据页目录 中的主键:槽位的对应关系,获取数据)

非聚簇索引

非主键索引(叶子节点存放的是,主键id+索引字段,(回表查询)需要再通过主键去聚簇索引进行查询获取数据)

非聚簇索引(二级索引,非主键索引,联合索引)

每创建一个索引,就要维护一个B+索引树

覆盖索引

存在联合索引的情况下,idx_A_B_C 

select id, A, B, C from user limit 10 

这种情况,sql 要查询的数据在联合索引树上都存在,直接将查询的数据返回就可以了。

select * from user limit 10

这种情况,查询的字段在联合索引树上不存在,则需要根据 联合索引树查询出来的 主键id 再去 聚簇索引树,查询所有的字段数据,第二次查询也被称为 “回表查询”

回表查询

非聚簇索引树查询出来的数据,不是sql 要的全部数据,(第一次查询)

更具 非聚簇索引树查询出来的 主键ID 去 聚簇索引树,再次查询(第二次查询)称为回表查询

前缀索引

idx_A20_B_C

创建A字段的前20个字符创建索引

前缀索引的字段,在 order by, group by 的时候,是不起作用的

联合索引查询规则

idx_A_B_C

1. 等值匹配规则, A="a" and B="b" and C="c"

2. 最左匹配规则

        2.1 最左侧列匹配 A="a" *

        2.2 最左前缀匹配 A="a%" *

3. 范围查找,联合索引第一个索引(仅且只有第一个索引)可以使用范围查找 A>"a" and A <"z" and * 

4. 等值匹配(第一个索引,或者第一+第二哥索引)+范围查找(有且仅有一个索引,非第一个索引) A="a" and *

联合索引排序

排序:

1. 文件排序

        1.1 双路排序

        1.2 单路排序

2. 索引排序

order by A desc, B desc, C desc

order by A asc, B asc, C asc

排序的方式要统一,都是升序,或者都是降序

因为在联合索引树上面,数据就是按照这个规则进行排序的,这样只要按照顺序去获取就行。

order by语句里有的字段不在联合索引里,或者是你对order by语句里的字段用了复杂的

函数,这些也不能使用索引去进行排序了

联合索引分组

联合索引分组和排序遵循的规则是一样的,按照顺序进行排序去进行分组

索引的创建

如果使用mysql现阶段进行搜索的话需要考虑这三方面去建立索引,一般不会单独去为 order by, group by 创建联合索引,因为 搜索的话,在项目时间允许,技术允许的情况下都会走es 去查询。

1. where条件创建联合索引

2. order by 条件创建联合索引

3. group by 条件创建联合索引

索引创建规则

1. 字段基数不要太低(true,false 该字段的基数就是2)

2. 字段过长考虑使用“前缀索引”

3. 索引列在使用的时候,不要使用任何函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值