文章目录

  • 1.0联合索引原理:
  • 2.联合索引实际应用


1.0联合索引原理:

用到索引的有a,ab,abc,ac 因为优化器会自动调整and前后的顺序,所以ba,cba,bca,ca都会用到索引,其他的都不会用到该索引。ac这一组仅仅是a用到索引。

组合索引 有“最左前缀”原则,遇到范围查询(>、<、between、like)就会停止匹配。为什么是“最左匹配”原则,可以通过数据结构来看:

联合索引是一颗b+树(a,b)

联合索引做关联查询怎么做 联合索引的实现原理_联合索引

2.联合索引实际应用

情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?

根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以走索引的,其他条件的查询不能走索引。

组合索引 有“最左前缀”原则。就是只从最左面的开始组合,并不是所有只要含有这三列存在的字段的查询都会用到该组合索引。

验证过程如下所示:

首先,在SQLyog中建立一个user表,如下图所示;

联合索引做关联查询怎么做 联合索引的实现原理_SQL_02

对中间3个字段(user_name,user_age,user_password)进行联合索引 index_user_join

查询情况如下所示:

1.同时查询这3个字段作为条件的SQL,索引情况及SQL语句如下所示:
SELECT *FROM t_user WHERE user_name=‘zs’ AND user_age=20 AND user_password=‘123456’;

其使用索引情况如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_数据库_03

从执行结果上可以看到是从走索引进行查询的

2.使用user_age和user_password作为查询条件进行查询,索引及SQL语句如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_索引_04

3.使用user_name和user_password作为查询条件进行查询,索引及SQL语句如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_联合索引_05

4.使用user_name作为查询条件进行查询,索引及SQL语句如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_联合索引_06

5.使用user_age作为查询条件进行查询,索引及SQL语句如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_SQL_07

6.使用user_password作为查询条件进行查询,索引及SQL语句如下所示:

联合索引做关联查询怎么做 联合索引的实现原理_索引_08

以上是针对普通的字段建立联合索引的测试情况及截图,