You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化海量数据集上带时间条件的COUNT(*)查询速度?

针对用户数统计查询的优化方案
  • 先查执行计划确认索引状态:执行 EXPLAIN select count(*) as aggregate from users where created_at < '2024-04-01';,查看key字段是否命中(created_at, type)索引,Extra字段是否显示Using index(覆盖索引)。若未命中索引,检查created_at字段类型与查询条件是否匹配,或是否有其他大查询/锁占用资源。
  • 替换为单列索引:删除现有的(created_at, type)复合索引,创建单独的created_at单列索引。复合索引包含额外的type字段会增大索引体积,230万+数据量下,更小的单列索引能减少磁盘IO开销,提升遍历速度。
  • 调整InnoDB缓冲池:检查innodb_buffer_pool_size参数,将其设置为服务器内存的50%-70%(避免影响其他服务),确保created_at索引能完全加载到内存中,后续查询可避免频繁磁盘读取。
  • 对表做范围分区:按created_at的日期范围为users表创建分区(比如按季度/月份分区)。查询created_at < '2024-04-01'时,数据库仅扫描符合条件的分区,无需遍历整个表或索引,大幅减少扫描行数。
  • 预存统计结果:若业务允许非实时数据,创建user_accumulate_count表,通过定时任务(如MySQL事件、脚本)每日更新截止到当天的累计用户数。查询时直接从该表取数,耗时可忽略不计。

内容的提问来源于stack exchange,提问作者Martin AJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:12:43