我的表包含 3 亿条记录,其中包含两个字段“名称”和“日期”。现在我需要计算上个月的记录所以我做了
select count(*) from lenders_transaction WHERE dates >= now()-interval 1 month;
但这需要很长时间,所以我需要建议如何优化计数查询以及如何获得快速结果。
@Valex 有正确的解决方案,即date
字段索引。
我想评论一下,一张有 3 亿行并且还在增长的表格是一张大表格。这个查询表明最近的数据比旧的数据更重要。如果是这样,您应该学习分区。
分区是一种将大表拆分为较小存储单元的方法。如果查询只需要访问其中一个,则只读取该数据进行处理——节省了大量资金。例如,如果您的数据按月分区并且您有 36 个月的数据,那么您的查询只需访问 2 个月的数据。与读取所有数据相比,这将节省近 95%。
这是关于分区的 MySQL 文档。