联合索引,最左匹配,范围查询

定义

联合索引是MySQL中常用的索引类型之一,它是由多个列组合而成的索引。联合索引可以帮助优化查询,提高查询效率,尤其是在多个列同时参与查询时。

最左匹配是指在联合索引中,如果查询条件中只涉及到联合索引中的最左侧列,那么可以利用该联合索引进行快速匹配。如果查询条件中还涉及到联合索引中的其他列,那么查询优化器可能无法充分利用联合索引,从而导致性能下降。

范围查询是指查询条件中涉及到了比较运算符(>, <, >=, <=, BETWEEN, IN等),这类查询条件无法使用“=”运算符进行匹配,需要进行范围匹配。最左匹配原则遇到范围查询就停止匹配。

例:

id | name | age | address

现在要在该表上建立一个联合索引,由name和age组成,即:

CREATE INDEX idx_name_age ON t (name, age);

设有两个查询:

  1. SELECT id FROM t WHERE id > 5 AND age>25;
  2. SELECT id FROM t WHERE age>25;
  3. SELECT id FROM t WHERE id = 5 AND age>25;

查询一,可以使用联合索引进行最左匹配。查询优化器可以利用联合索引进行快速匹配,定位到符合条件的数据行。

查询二,不可以匹配;虽然也涉及到了联合索引的一部分age,但是查询条件中没有涉及到联合索引的最左侧列id,因此无法进行最左匹配。在这种情况下,查询优化器可能会选择全表扫描或者使用其他索引进行查询,从而导致性能下降。

查询三,不可以匹配;最左匹配原则遇到范围查询就停止匹配。

Q:SELECT id FROM t WHERE age>25 AND id > 5 ; 是否可以匹配索引?

能;Mysql有优化器会自动调整顺序与索引顺序一致。

Q: 对下面的查询如何建立查询?

SELECT * FROM table 
WHERE a = 1 and b = 2 and c = 3; 

重点要的是将区分度高的字段放在前面,区分度低的字段放后面。像性别、状态这种字段区分度就很低,我们一般放后面。

例如假设区分度由大到小为b,a,c。那么我们就对(b,a,c)建立索引。在执行sql的时候,优化器会帮我们调整wherea,b,c的顺序,让我们用上索引。

REF:(28条消息) mysql 联合索引_TanaStudy的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坠金

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

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

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

打赏作者

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

抵扣说明:

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

余额充值