开发者社区> 问答> 正文

MySQL索引range出现group by怎么优化

假设这样一个查询:

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?

展开
收起
seanlook77 2016-04-22 18:16:28 4157 0
1 条回答
写回答
取消 提交回答
  • 专注于数据存储系统、MySQL源码研究和改进、MySQL性能优化和功能改进,并设计了阿里云高可靠双通道binlog方案。他在业务场景分析、系统瓶颈分析、性能优化方面拥有丰富的经验。微博@淘宝丁奇。

    1、是的,原语句的group by fname必须要filesort
    2、即使建了 idx_F2(fid,fname) 也不一定会用上,MySQL优化器大部分时候会考虑以过滤条件为准,除非你的语句中使用force index来强制使用。

    2019-07-17 18:46:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像