小编Ape*_*tus的帖子

在 MySQL 中构建日志记录应用程序数据的最佳方法是什么

我可能想多了,但是:

我有一个 API;我想记录对 API 的调用以进行统计/调试。理想情况下,读取速度应该很快,但不是必需的(主要由我读取)。但是,写入速度应该不错,因为我不想减慢 API 的速度。

我们将从头开始,但 API(和日志记录)将持续数年。数据越旧,它的用处就越小。在某些时候,我们可能希望完全删除旧数据(例如,删除超过三年的数据)。

目前正在运行 MySql 5.5。

构建表格的最佳方法是什么?按年对它进行分区,只是弥补未来分区的负载?

PARTITION BY RANGE( YEAR(date) ) (
    PARTITION p0 VALUES LESS THAN (2016),
    PARTITION p1 VALUES LESS THAN (2017),
    PARTITION p2 VALUES LESS THAN (2018),
    PARTITION p3 VALUES LESS THAN (2019),
    PARTITION p4 VALUES LESS THAN MAXVALUE
);
Run Code Online (Sandbox Code Playgroud)

或者有没有办法创建自动滚动分区?

还是我只是按年份编制索引?

mysql logs partitioning

5
推荐指数
1
解决办法
1811
查看次数

为什么向我的查询添加 LIMIT 会使其爬行?

简单查询:

select sum(score) total,name,gender,dob,country 
from users join scores on users.id = scores.user_id
where date between '2012-01-01' and '2012-01-31 23:59:59'
group by scores.user_id having sum(score)>=1000 order by sum(score) desc limit 50
Run Code Online (Sandbox Code Playgroud)

因此,尝试获取 2012 年 1 月的累积分数列表,按分数降序排列它们并对其进行分页。

无限制:缓慢但可以:搜索 69348 行。(很高兴弄清楚如何避免临时表,但我不能)。解释说:

1, 'SIMPLE', 'scores', 'range', 'user,date,user+date', 'date', '8', '', 69348, 'Using where; Using temporary; Using filesort'
1, 'SIMPLE', 'users', 'eq_ref', 'PRIMARY', 'PRIMARY', '8', 'scores.user_id', 1, 'Using where'
Run Code Online (Sandbox Code Playgroud)

有限制:它是一样的,但行搜索现在是 1806794,它需要永远。

如果有任何区别,它是一个分区的 InnoDB,所有数据都在一个分区上。

mysql optimization limits group-by

2
推荐指数
1
解决办法
343
查看次数

标签 统计

mysql ×2

group-by ×1

limits ×1

logs ×1

optimization ×1

partitioning ×1