假设这样一个查询:
select * from T1
where T1.fid=123 and T1.ftime > '2016-04-22 00:00:00'
group by T1.fname
T1表上有个索引idx_F1(fid,ftime,fname)
,请问这种情况下 group by fname 是用不到索引对吗?
那么问题来了,只要我的查询where条件出现范围查询(>, in),后面出现group by或order by都会出现filesort? 要么就建个索引 idx_F2(fid,fname)
,优化器可能会牺牲掉range条件,选择idx_F2?
1、是的,原语句的group by fname必须要filesort
2、即使建了 idx_F2(fid,fname) 也不一定会用上,MySQL优化器大部分时候会考虑以过滤条件为准,除非你的语句中使用force index来强制使用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。