我目前正在运行不同的查询,这些查询要排除过去36个小时内未处于活动状态的那些用户。
我的用户表具有last_connection_time,这是该用户上次连接的时间的时间戳。
我正在考虑将a添加users.last_connection_time < $timestamp_36hours_ago到相关查询中。
我有点担心,但这会对性能产生多大的影响。
每隔2到6个小时运行一个脚本来更新users表中的boolean列innactive,然后通过a忽略查询中那些无效用户,会更好whereNull('users.innactive')吗?
索引last_connection_time然后执行比比较大/低的比较将足够快,并且将使用索引,这将在查找记录时极大地帮助MySQL。
但是,如果创建一个布尔列,然后基于whereNull(users.inactive)->索引执行查询无法帮助您,那是低基数列,MySQL可能会忽略此处的索引,因为它无助于减少I / O,因此请检查整个数据集-那就是您要避免的事情。
您的数据集可能未超过TB的限制(甚至不超过千兆字节),因此您目前可能不会在这两种方法之间看到太多差异,但是对于不断增长的数据集,我只不过是将timestamp列编入索引并执行>或<您希望在第一种情况下进行的查询类型。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。