gpt4 book ai didi

mysql - 需要帮助加快此查询

转载 作者:可可西里 更新时间:2023-11-01 08:15:49 27 4
gpt4 key购买 nike

我有一个程序可以扫描服务器上的在线用户,并为找到的每个用户在表中插入一个新行。此扫描每 5 分钟进行一次,数据用于在网站上绘制用户事件图。

这是我的表的结构:

-------------------------------------------------------
| stats_table |
-------------------------------------------------------
| id, bigint(20) unsigned not null PRI auto_increment |
| scan_id, bigint(20) unsigned not null |
| username, varchar(32) null |
| time_scanned, timestamp not null def=curr_timestamp |
-------------------------------------------------------

我想获取自午夜以来找到的合计用户数,每次扫描

我已经设法得到这个,但是查询需要超过 15 秒才能完成:

SELECT COUNT(*) FROM (SELECT DISTINCT t.scan_id, t1.username FROM
stats_table INNER JOIN stats_table t1 ON
t.scan_id >= t1.scan_id WHERE
t1.time_scanned > CONCAT(DATE(t.time_scanned), ' 00:00:00') AND
t1.time_scanned > DATE_SUB(NOW(), INTERVAL 24 HOUR) AND
t1.time_scanned <= NOW()
) s GROUP BY s.scan_id

所以我想知道是否有更快的方法来获得这个结果?

这是我图表上的可视化表示。蓝色代表当前在线用户,红色代表今天到目前为止看到的用户总数:

enter image description here

澄清一下,在 17:00 时,有 2 个用户断开连接,然后 15 分钟后,有 2 个新用户自午夜以来首次连接到服务器。您可以看到红线如何从 7 上升到 9 来表示这一点。同样,今天 23:00 也有新用户首次连接。

最佳答案

因为我没有看到索引定义,所以我假设它不存在。您需要做的是在您正在运行的查询上添加一个索引:

请注意,这很可能会导致插入/更新变慢。

关于mysql - 需要帮助加快此查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28747075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com