譬如如下语句
select user_id,sum(age) from table where date > '2020-02-14' and date < '2020-03-01' group by user_id
假如建了三个索引 index_user_id, index_user_id_date, index_date,
理想状况是使用index_user_id_date这个索引,但是执行流程是先执行where,后执行group by,所以不行,不知道有什么方法可以改变mysql执行顺序吗?
用explain却发现使用了index_user_id这个索引,但是我的理解是,根据执行流程,先执行where,后执行group by,执行where后筛选剩下的数据行进行group by是不可能使用到index_user_id这个索引,怎么回事呢?
可以开启OPTIMIZER_TRACE看一下,可能是使用index_user_id的成本最低,优化器就选择这个索引了