mysql-索引-组合索引的最左匹配原则

为何要使用组合索引呢

  1. 效率高,减少查询开销,索引列越多,通过索引筛选出的数据越少
  2. 覆盖索引,MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操

最左匹配原则是什么

顾名思义,就是最左优先,在创建组合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。复合索引很重要的问题是如何安排列的顺序,比如where后面用到c1, c2 这两个字段,那么索引的顺序是(c1,c2)还是(c2,c1)呢,正确的做法是,重复值越少的越放前面,比如一个列 95%的值都不重复,那么一般可以将这个列放最前面。另外,复合索引的字段数尽量不要超过 3个,一旦超过,要慎重考虑必要性。

index(a,b,c)
where a=3    只使用了a
where a=3 and b=5    使用了a,b
where a=3 and b=5 and c=4    使用了a,b,c
where b=3 or where c=4    没有使用索引
where a=3 and c=4    仅使用了a
where a=3 and b>10 and c=7    使用了a,b  5.6版本后有索引下推优化,会用到a,b,c
where a=3 and b like 'xx%' and c=7    使用了a,b   5.6版本后有索引下推优化,会用到a,b,c

其实相当于创建了多个索引:key(a)、key(a,b)、key(a,b,c)

本文转载:https://blog.csdn.net/alex_xfboy/article/details/90695401

二、查询索引问题

查询条件:where a..  and c... and b..   //假设数据库索引结构顺序是a,b,c组合索引
问是否有会触发索引,这里要分情况讨论,因为需要考虑【查询优化器】它具有查询条件重排序功能
以及【索引下推】

1、最坏的情况:没有索引下推,没有重排序,这个时候只会走A索引。
2、最好的情况下:有查询条件重排序,会把查询条件优化成a,b,c 最终就是全部命中。
3、只走索引下推:那么a使用索引,c使用过滤,这两个都是存储引擎层会做好,b不触发索引,
b的过滤是在myql服务层做。

三、强制使用指定索引

SELECT * FROM table_name FORCE INDEX (index_name)
WHERE condition;

UPDATE table_name FORCE INDEX (index_name) 
SET column_name = value WHERE condition;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值