MYSQL 分组语句的优化

表结构:

img

想达到的效果:
传入一个日期,获取小于等于这个日期最近的一个日期并且用户数大于1;
例如:传入参数是 2022-11-2 预期返回结果是 2022-10-30;

目前实现的SQL:
SELECT max(日期) from 表名 where 日期 <= STR_TO_DATE('2022-11-02','%Y-%m-%d') GROUP BY 日期 HAVING count(用户ID)>1;

出现的问题:
速度极慢,表中数据量在1-2000W;

有考虑的思路:
在JAVA中遍历日期 进行单条日期查询 判断结果;(效率不确定性大,万一符合条件日期距离很远,需要查询SQL就多)

可以把

select 日期 from 表名 group by 日期 having count(用户ID) > 1;

单独做成一个表或者放在redis里

STR_TO_DATE('2022-11-02','%Y-%m-%d') 这里不能直接传个日期么,查询时间字段有没有加索引呢,函数转化也需要耗时的