优化SQL查询以更快地返回结果



我有一个包含数百万条记录的表。我想获取当前日期的前10个收入者(通过对user_id进行分组并添加同一用户的earnings字段值来计算(,我已经为此创建了以下查询。

SELECT user_id, SUM(earnings) AS earn
FROM statistics
WHERE created LIKE "2022-03-15%"
GROUP BY user_id
ORDER BY earn DESC
limit 10

查询给出了预期的结果,但问题是,处理和所有操作大约需要90秒。

在上述查询中是否有任何可能的修改,以使其在10-15秒内或更短时间内更快地获得结果?

WHERE created LIKE "2022-03-15%"

-->

WHERE created >= "2022-03-15"
AND created  < "2022-03-15" + INTERVAL 1 DAY

前者不是";sargable";因为它必须将CCD_ 2转换成字符串来执行CCD_。后者可能非常有效地使用索引idx_created_userid

在上面的查询中是否可以进行任何修改,以使其在10-15秒内更快地获得结果?

不,查询中没有任何可以更改的内容来弥补表上索引的不足。每次运行该查询时,MySQL都必须查看表中的每一行,您说这大约是8000000行。索引使得MySQL只需要查看相关行的子集。

最新更新