【MySQL】-复合索引该怎么用

本文均已学习为主,不考虑实际业务。若在实际业务中,还需考虑增删改的代价和实际需要。

什么时候建索引

数据量大,查询业务多的
where从句
group by从句
order by从句
on从句
中的字段,可以考虑建索引。

联合索引怎么建

alter table t add index abc(a,b,c);

这里有一个原则:离散度大的列放在前
离散度:唯一值多,离散度越大
(eg:id>姓名>年龄>性别)

注意避免重复索引,冗余索引
(eg:(a,b,c)索引包含了(a)索引(最左前缀),故索引(a)就是冗余索引)

基于联合索引的知识点

覆盖索引:sql只需要通过索引就可以返回查询所需要的数据,避免了回表。

eg:select age from user where name='小松'
在这条语句中,如果加入索引(name,age),就可以使用覆盖索引,一次搜索索引树得出结果。

最左前缀原则:就是左边优先呗
  • 在联合索引中体现在,索引(a,b,c)包含了索引(a,b)和索引(a)。建了索引(a,b,c),以a为条件查询可以走索引
  • 在以一个字符串为索引的列,如果模糊查询,%放在了后边,还是可以走索引也是因为最左前缀原则
索引下推:MySQL5.6之后加入的,可以减少回表次数。

eg:select * from user where age=18 and sex='男'

idnameagesex
018
118
218
319

在有(age,sex)的联合索引前提下
如果没有索引下推,需要回表3次:根据age=18查出三个id,回到主键索引查出整条数据,在筛选满足sex='男’的两个数据。
如果有索引下推,需回表2次:同时根据age=18和sex='男’查出两个id,后边同上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值