group by是否会用到索引_进阶联合索引

单字段索引不能满足你了,那就多来几个...

创建普通索引的时候,指定两个或更多的字段
这就是联合索引,语法如下

alter table 表 add index 索引名(字段1,字段2)

维护数据库时发现现索引重复了?

这时可以删掉重复的索引,释放内存空间,提高查询效率

#因为联合索引(A,B)相当于创建了(A)和(A,B)索引  KEY idx_Id (Id)  KEY idx_Id_age (Id, age)  #所以这里可以删除Id 这个索引;
使用联合索引时,注意索引列的顺序,要遵循 最左匹配原则
联合索引 "idx_id_age " ,id在前,age在后  #符合最左匹配原则select * from user where id=10 and age =10;#符合最左匹配原则select * from user where id =10;#age在前就不符合最左匹配原则,即不会用到索引select * from user where age =10 and id =10;

当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。

如果遇到了范围查询,比如()和 between 等,
会停止匹配,那后面的列就不会用到联合索引了。

where k1 > 1 AND  k2  = 2   AND  k3 = 3#这里k1 使用了范围查询,所以后面的k2,和k3 列就不会使用到联合索引了

这里有几条SQL语句,说说它们分别用到了哪个索引呢?

1.SELECT x, y, z FROM table WHERE y=2 AND x>1 AND z=32.SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z>33.SELECT x, y, z FROM table WHERE y=2 AND x=1 AND z=34.SELECT x, y, z FROM table WHERE y>2 AND x=1 AND z=3

结果是 : 这四条语句都会用到索引!!

1: WHERE y=2 AND x>1 AND z=3 -- 使用索引(x,y,z)的x列。#x是范围列,索引列最多作用于一个范围列,范围列之后的y列和z列无法使用索引。2: WHERE y=2 AND x=1 AND z>3 -- 完整使用索引(x,y,z)。3: WHERE y=2 AND x=1 AND z=3 -- 完整使用索引(x,y,z)。4: WHERE y>2 AND x=1 AND z=3 -- 使用索引(x,y,z)的x列和y列。#y是范围列,索引列最多作用于一个范围列,范围列之后的z列无法使用索引。

最后邀你进群一起学习
关注公众号 技能锦囊
后台回复 SQL

8a3e6cc1abbeb8dcc8b8169484593e85.png长按关注

by~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值