数据库查询统计数据怎么执行比较合适?

2023-06-29 408 0

PHP新手!!!!

有一个数据表,数据量可能在几千到几万。
有一个统计接口,需要返回一些统计数据。
比如返回男女性别的数量,1~12级的等级数量,不同地区的数量等等。
该怎么写SQL?
用不同的查询语句,分别查询呢?
还是把全部数据查出来,然后自己过滤?
几万条数据全部查出来,会不会很慢?

有两个方案供参考

实时SQL统计查询

简要逻辑:按需求,每个统计项分别通过SQL统计查询,然后响应给前端展示
性能优化点:1. 统计数据在满足实时性需求的前提下进行缓存 2.根据查询条件在数据库侧建立索引

异步SQL统计查询

简要逻辑:按需求罗列统计项新建统计数据库表,根据实时性要求针对每个统计项定时通过SQL统计查询,把结果写入统计数据表,每次前端请求的时候,后端直接查统计表,然后响应给前端展示
性能优化点:1.根据查询条件在数据库侧建立索引 2.根据数据变化时机去更新统计数据,而非固定的定时

  • 使用clickhouse或者Doris
  • 每隔一段时间将数据全量同步到clickhouse或者Doris,也可以实时增量同步,网上有很多方案,可以查查
  • 写sql在clickhouse或者Doris查询
  • 如果访问请求比较大,可以将结果放入缓存

    clickhouse或者Doris导入数据和查询都是很快的

-- 统计男女性别的数量
SELECT gender, COUNT(*) AS count FROM user_table GROUP BY gender;
-- 统计1~12级的等级数量
SELECT level, COUNT(*) AS count FROM user_table WHERE level BETWEEN 1 AND 12 GROUP BY level;
-- 统计不同地区的数量
SELECT region, COUNT(*) AS count FROM user_table GROUP BY region;

回答

相关文章

nuxt2部署静态化和ssr的时候访问首页先报404再出现首页为什么?
`clip-path` 如何绘制圆角平行四边形呢?
多线程wait方法报错?
VUE 绑定的方法如何直接使用外部函数?
vue2固定定位该怎么做?
谁有redis实现信号量的代码,希望借鉴一下?