我在一个名为"last_seen"的表列中有时间戳,如下所示:
2012-01-25 18:46:42
2012-01-23 08:19:04
2012-01-23 08:19:04
etc...
Run Code Online (Sandbox Code Playgroud)
如何获取时间戳在当前时间戳的10分钟内的所有记录(以最有效的方式)?
pio*_*trm 53
最有效的方法是将时间戳(和时间戳,不使用其上的任何函数)与可以计算为每行的常量的表达式进行比较,这样mysql可以使用在timestamp列上定义的索引.
SELECT * FROM myTable
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE
Run Code Online (Sandbox Code Playgroud)
您始终可以尝试EXPLAIN SELECT ...查看索引是否可用于查找满足WHERE条件的行,而无需检查表中的每一行.
您的问题要求在当前时间戳的 10 分钟内进行记录,但我认为这意味着过去不超过 10 分钟(不是未来):
SELECT col1, col2, col3
FROM table
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW();
Run Code Online (Sandbox Code Playgroud)
这将增加 10 分钟last_seen并将其与当前时间进行比较。如果该值更大,last_seen则小于十分钟前。
有关如何使用它的说明,请参阅 上的文档DATE_ADD()。