我目前正在运行不同的查询,其中我想排除那些在过去36小时内没有活动过的用户。
我的users表有一个last_connection_time
,它是用户上次连接的时间戳。
我正在考虑在相关查询中添加一个users.last_connection_time < $timestamp_36hours_ago
。
我有点担心这会对演出产生多大的影响。
最好每2-6小时运行一次脚本,更新名为innactive
的users表中的布尔列,然后通过whereNull('users.innactive')
忽略查询中的innactive。
发布于 2019-12-28 13:24:27
索引last_connection_time
,然后执行更大/更低的比较将足够快,并将使用索引,这将极大地帮助MySQL寻找记录。
但是,如果您创建一个布尔列,然后执行基于whereNull(users.inactive)
->索引的查询,那么它是一个低基数列,MySQL可能会忽略这里的索引,因为它无助于减少I/O,从而检查整个数据集--这正是您想要避免的。
您的数据集可能不会超过万亿字节的限制(甚至是千兆字节),所以您现在可能不会看到这两种方法之间有太多不同,但是对于永远增长的dataset,我只是将时间戳列进行索引,并执行>
或<
类型的查询,就像您在第一个场景中想要做的那样。
https://stackoverflow.com/questions/59511005
复制相似问题