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

MySQL中多次复用过滤结果的高效实现方案咨询

高效统计多平台记录数的优化方案

你的问题根源在于重复执行相同的过滤逻辑,多次扫描数据导致耗时高,临时表又因数据体积带来额外CPU负载。最直接的优化方式是只做一次过滤,再基于过滤结果完成多维度统计,用条件聚合就能实现。

优化后的SQL代码

SELECT
  COUNT(CASE WHEN service LIKE '%youtube%' THEN 1 END) AS youtube_count,
  COUNT(CASE WHEN service LIKE '%facebook%' THEN 1 END) AS facebook_count,
  COUNT(CASE WHEN service LIKE '%twitter%' THEN 1 END) AS twitter_count
FROM report
WHERE user_id = 1 AND created_at < '2023-03-01'

为什么这个方案更高效

  • 仅扫描一次符合user_id和created_at条件的数据,彻底避免了多子查询重复过滤的开销
  • 无需创建临时表,减少了内存和CPU的额外消耗
  • 逻辑简洁,后续新增平台统计只需加一行CASE WHEN即可,维护成本低

额外索引优化建议

如果想进一步提速,给表创建复合索引:

CREATE INDEX idx_report_user_created ON report(user_id, created_at);

这个索引能让数据库快速定位到符合user_id和日期范围的数据,不用全表扫描。注意:service字段的%xxx%模糊查询无法利用索引,所以只能靠前置过滤缩小数据范围来提升统计速度。

内容的提问来源于stack exchange,提问作者Web Star

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:23:22