我当前正在运行不同的查询,我想排除那些过去 36 小时内不活跃的用户。
我的用户表有一个
last_connection_time
,它是用户上次连接时间的时间戳。
我正在考虑在相关查询中添加
users.last_connection_time < $timestamp_36hours_ago
。
我有点担心这会对性能产生多大影响。
是否最好每 2 - 6 小时运行一个脚本来更新用户表中名为
inactive
的布尔列,然后通过 whereNull('users.inactive')
忽略查询中的那些不活动用户?
索引
last_connection_time
然后执行大于/小于比较将足够快并且将使用索引,这将在查找记录时极大地帮助MySQL。
但是,如果你创建一个布尔列,然后基于
whereNull(users.inactive)
执行查询 -> 索引无法帮助你,它是一个低基数列,MySQL 可能会忽略这里的索引,因为它无助于减少 I/O ,从而检查整个数据集 - 这就是您想要避免的。
您的数据集可能不会超过太字节限制(甚至千兆字节),因此您当前可能不会看到两种方法之间有太多差异,但对于不断增长的数据集,我只需保留时间戳列索引并执行
>
或 <
类型的查询,就像您在第一个场景中想做的那样。