随笔 - 1062  文章 - 0  评论 - 82  阅读 - 226万

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   清明-心若淡定  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2021-03-16 Octave快速入门--机器学习知识点补充
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示