如何在现有索引约束的大表上针对Bug优化COUNT查询?

问题描述 投票:0回答:1

我正在研究一个查询,以计算 2019 年 3 月 1 日或之后从具有以下架构的

bugs
表中创建的错误数量:

bugs(id, token, title, category, device, reported_at, created_at, updated_at) 

这是我当前使用的查询:

SELECT COUNT(*)

FROM bugs

WHERE created_at >= '2019-03-01';

但是,该查询运行速度非常慢,并且达到了时间限制。我应该提到的是,我无法向该表添加任何新索引。现有索引名为

index_bugs_on_category_and_token_and_reported_at

我将非常感谢任何有关如何优化此查询的建议或任何在现有限制下加速查询的替代方法。

sql mysql database query-optimization
1个回答
0
投票

您可以创建一个表,在其中存储每个月的记录,并存储给定月份的记录数、该月的最小 bug id 和该月的最大 bug id,结构如下所示:

monthly_bugs(id, started_at, ended_at, number_of_bugs)

然后,如果您想获取自月初以来的错误数量,您可以执行类似的操作

select sum(number_of_bugs)
from monthly_bugs
where started_at >= '2019-03-01'

当然,您首先需要进行大量数据导入,这需要时间,但这对您来说是一生一次的成本。此外,随着错误的涌入,您可以定期添加/更新最新的月份记录。

© www.soinside.com 2019 - 2024. All rights reserved.