MySQL ---索引的使用

 

 

 

联合索引最左列字段必须存在,不存在不走索引,但是跟所放位置没有关系,放最后也没关系(where后)

 

 

 

 

 

 

eg:  select * from tb_user where  substring(phone, 10, 2) = '15');

 

 

 

 

 

 

 索引phone失败了,因为存在隐式内容转换

 

 

 

 

 

 

 

 下面的 '%工程‘ 索引失败了,type=ALL , 全表查询

 

 

 

 

 

 

 用不用索引,取决于表中数据分布,要查找的数据大部分都在表中,没有使用索引,全表扫描。

 

 

 

 

 

 

 针对select 后的查询字段

 

 

 

 

 

 

 

直接从聚集索引id=2处拿到row

 

 

 

 

 直接从二级索引中得到id值,不需要回表

 

 

 

 从二级索引中取到id,name,但是gender取不到,需要根据id去聚集索引中查,用到了回表查询

 

 

 建立联合索引(username,password) 覆盖索引,可返回id,username,password,不需要回表查询。

 

 

 

 

 

 

 

 

 计算处合适的前缀长度

 

 

 从聚集索引中拿到row,还需对比email值是否完成相等,接着还要继续在辅助索引中查找下一个是不是前缀相同,最后把查询到的结果整合返回

 降低索引体积,提高索引效率

 

 

 

 

 

 

 上面只用了phone索引,name的没有用到,涉及到回表查询,在phone索引表中没有name字段信息

创建联合索引

 

 

 指定使用联合索引(use index(idx_user_phone_name)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 如果查询的是id,phone,name则在二级索引表中能获取到所需信息,不用回表查询

 

 

 

 

 

 

 

 

posted on 2022-03-16 16:10  清明-心若淡定  阅读(60)  评论(0编辑  收藏  举报