使 SQL 查询更快地优化为 return 结果

Make SQL query optimize to return result faster

我有一个 table 有数百万条记录。我想获取当前日期的前 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 秒或更短时间内更快地获得结果?

Is there any modification possible in the above query to make it faster to get results within 10-15 seconds or less?

不,您无法在查询中更改任何内容来弥补 table 上缺少的索引。每次您 运行 该查询时,MySQL 都必须查看 table 中的每一行,您说的是大约 8,000,000 行。索引使得 MySQL 只需要查看相关行的一小部分。

WHERE created LIKE "2022-03-15%"

-->

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

前者不是“可搜索的”,因为它必须将 DATETIME 转换为字符串才能执行 LIKE。后者很可能非常有效地使用索引idx_created_userid