存在一张交易记录表包含用户的id(user_id
)以及交易的时间(purchase_date
).
需要制作统计图,X轴则代表每一个月,Y轴则代表本月及本月以前有订单交易的用户数.
现在问题就是由于交易数据过多,一但统计的月数过多查询就会超时(5分钟就会timeout)
sql:SELECT COUNT(DISTINCT user_id) AS user_count, target_month from 记忆记录表 tt JOIN (SELECT 某个月 AS target_month UNION SELECT 某个月 AS target_month UNION ....SELECT 某个月 AS target_month) as tm ON tt.purchase_date < (target_month + 一个月) GROUP BY tm.target_month
大佬们有没有什么办法优化?
手头没有
MySQL
,拿俩小型数据库试一试。SQL
流程优化LEFT JOIN
等补齐)测试结果(千万用户、一亿交易记录)
DuckDB
完整测试SQL
代码运行结果
SQLite
完整测试SQL
代码运行结果