MySQL中统计一天之内每个时间段内的数据,很急

MySQL中统计一天之内每个时间段内的数据,很急,第1张

时间段统计,可以采用 hour(subscribe_time) 取出小时然后分层。思路:

select

uid

,CASE WHEN HOUR(subscribe_time) BETWEEN 0 AND 1 THEN '00:00:00'

WHEN HOUR(subscribe_time) BETWEEN 2 AND 3 THEN '02:00:00'

...

ELSE '23:00:00' END -- 生成时间分层部分,insert前外层sql加上日期后作为唯一的时间值

,COUNT(*)

FROM yht_fans WHERE subscribe_time>=UNIX_TIMESTAMP(CURDATE()) and subscribe_time<=UNIX_TIMESTAMP(CURDATE())+86400

GROUP BY 1,2

如果表里的数据是

loginid lognintime

1 8

2 8

3 9

4 9

是不是问题就很容易解决了?

那么用 to_char(datecolumn,'hh24') 就可以把 lognintime 字段的内容替换成我们需要的小时

所以我写的sql如下:

select X.hours as 时间, count(X.hours) as 出现次数

from(select loginid, to_char(datecolumn,'hh24') as hours from 表)X

group by X.hours

实行结果:

时间 出现次数

8 2

9 2

即:在八点到九点这个时间段内出现了2次,在九点到十点这个时间段内出现了2次

统计信息是数据库基于成本的优化器最重要的参考信息;统计信息不准确,优化器可能给出不够优化的执行计划或者是错误的执行计划。对统计信息的计算分为非持久化统计信息(实时计算)与持久化统计信息。

非持久化统计信息

统计信息没有保存在磁盘上,而是频繁的实时计算统计信息;

每次对表的访问都会重新计算其统计信息;

假设针对一张大表的频繁查询,那么每次都要重新计算统计信息,很耗费资源。

持久化统计信息

把一张表在某一时刻的统计信息值保存在磁盘上;

避免每次查询时重新计算;

如果表更新不是很频繁,或者没有达到 MySQL 必须重新计算统计信息的临界值,可直接从磁盘上获取;

即使 MySQL 服务重启,也可以快速的获取统计信息值;

统计信息的持久化可以针对全局设置也可以针对单表设置。

接下来,详细说 MySQL 统计信息如何计算,何时计算,效果评估等问题。在 MySQL Server 层来控制是否自动计算统计信息的分布,并且来决策是持久化还是非持久化。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7238484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存