为什么联合索引还会回表呀?

country 表上 Name和population上有联合索引

执行该语句的时候

但是似乎还是产生了回表(USING WHERE) 而且用的索引也是联合索引 这是为啥????


关注
#面试复盘#
全部评论
数据库索引最左匹配原则 1.建立联合索引时会遵循最左匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配 2.如果联合索引中最左边的列不在查询条件中,则不会命中索引
点赞 回复 分享
发布于 2023-01-04 15:14 浙江
我的理解是先走联合索引的覆盖索引,查出符合条件的主键,然后回表查对应的name。如果你把name换成主键,走的索引还是相同的,可以试下
点赞 回复 分享
发布于 2022-04-10 17:43
孩子 这不是回表啊 用到索引了只是在索引范围内查找啊 快去补补基础吧
点赞 回复 分享
发布于 2022-03-23 13:49
mysql 选择索引的几个条件之一: 1。 会优先选择区分度比较高的, 请看 name , 跟popu字段 谁的基数高 2。 会优先选择不需要回表的列。 如果用pop  索引 必定要回表,所以mysql没考虑 3。 order by 出现的列。  所以我推测符合条件2, 采用name_pop的原因就是name_pop不需要回表吧。 emmmm  useing where 代表回表了吗? 我有空在翻翻书, 我也忘记了。
点赞 回复 分享
发布于 2022-03-20 09:29
你直接对主键索引 进行 explain select id from t where id > 10;  也有using where ;
点赞 回复 分享
发布于 2022-03-15 23:10
using where 不是只是说使用到了where查询吗?为啥说回表了?
点赞 回复 分享
发布于 2022-03-15 23:09
Using index:表示相应的select操作用使用覆盖索引,避免访问了表的数据行。如果同时出现using where,表名索引被用来执行索引键值的查找;如果没有同时出现using where,表名索引用来读取数据而非执行查询动作。
点赞 回复 分享
发布于 2022-03-15 23:07
用的Name_pop
点赞 回复 分享
发布于 2022-03-14 00:06
索引优化了,你仔细看explain信息
点赞 回复 分享
发布于 2022-03-14 00:06
猜应该是,<1000000这个条件让查询优化器放弃走索引,全表扫描了
点赞 回复 分享
发布于 2022-03-13 19:45

相关推荐

04-09 15:41
门头沟学院 Java
几个人:linux 基础命令,网络基础, shell 脚本,自动化工具 ansible ,数据库 mysql 和 redis,nginx,负载均衡集群,监控Prometheus , docker,k8s,一个云平台的使用以阿里云为主,其次是腾讯云,华为云这些
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
04-09 23:20
已编辑
投票
涂鸦智能 硬件工程师 14k×12,公积金12 本科其他
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务