索引使用规则

本文介绍了MySQL联合索引的最左前缀法则,强调查询必须从索引最左列开始,不跳过任何列。当跳过某列时,后续字段的索引会失效。范围查询会导致右侧列索引失效,建议使用>=或<=。同时,索引失效的情况包括:在索引列上进行运算,字符串类型字段未加引号,头部模糊匹配,OR条件中无索引的列,以及MySQL认为全表扫描更快时不使用索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.最左前缀法则

如果使用了联合索引,要遵守最左前缀法则。最左前缀法则是指:查询从索引的最左列开始,且不跳过索引中的列。

如果跳过了某 一列,索引将会部分失效(后面的字段索引失效)

可以看到我创建了一个联合索引包含了三个字段birth_date,first_name,last_name

当我们按索引顺序来查询的时候会得到结果

 当我们打乱一下顺序

发现并没有影响。

当我们删掉中间一个条件,也就是first_name

 发现索引部分失效了,其索引只使用了birth_date='1953-09-02'这一个条件,这也验证了之前提到的如果跳过了某 一列,索引将会部分失效(后面的字段索引失效)

范围查询

联合索引中,出现范围查询(<,>),范围查询右侧的列索引失效

具体对比可以参考下图 

也就是说在一定要使用范围查询的情况下,尽可能使用>=或者<=

索引失效:

1.不要在索引列上进行运算操作,否则索引将失效。

2.字符串类型字段使用时不加引号,索引失效。

3.模糊查询中如果仅仅尾部模糊匹配,索引不会失效,如果是头部模糊匹配,索引失效。

 4.用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引将会失效。

5.如果mysql评估索引比全表扫描慢,则不使用索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值