Mysql 怎么一次性取出一天内每5分钟为一个时间点的所有数据

你写的方式有问题。
坦白说,时间格式不统一,直接使用date()函数传递会出现问题。
2 01 2 -08 -2 01 1 :2 0:00 这个日期肯定是错误的。
现在是晚上 8 :00。
2 01 2 年 8 月 1 1 日夏普,对吗?
首先看时间条件。
假设表中的时间字段是DATETIME类型。
您的查询逻辑是正确的,但是时间格式需要更改。
例如:
sql 从 xx 中选择 哪里时间 > '2 01 2 -08 -1 1 2 0:00:00' AND 时间 < DATE> 这允许晚上 8 :00 之间进行记录。
和晚上 8 :05 2 01 2 年8 月1 1 日被准确过滤掉。
如果时间字段是TIMESTAMP类型,则直接使用字符串即可。
但是,最好使用 STR_TO_DATE() 来更安全地进行转换。

如果表不包含时间字段,则使用LIMIT。
但是你写limit3 0的方式,取3 0的频率是不可理解的。
直接使用即可:
sql 从 xx 限制 3 0 中选择;
如果要取2 8 8 次,就写2 8 8 次:
sql 从 xx 限制 3 0 中选择; 从 xx 限制 3 0 中选择; ... 从 xx 限制 3 0 中选择;
或者编写一个循环(如果在程序中运行):
sql for i in 1 ..2 8 8 循环 从 xx 限制 3 0 中选择; 结束循环;
不要陷入所有的花里胡哨的事情。
保持简单直接。

深入理解MySQL中时间范围的处理方式

说白了,MySQL的deadline处理核心就是三件事:选对类型、会写条件、懂优化。

我们先来说说最重要的事情。
如果你选择了错误的类型,你就会迷失方向。
比如我们去年跑的一个电商项目,用户活动统计数据是直接用TIME来秒级存储的。
结果,当天的所有查询都崩溃了。
日期更有用。
例如,用户注册日期比纯日期查询DATETIME至少快3 0%。
还有一点,以TIME格式存储日常工作时间时,记得范围内包含00:00,否则2 3 :5 9 :5 9 和00:00:00会计算错误。
还有一个更重要的细节。
去年有一个项目使用了DATE+TIME。
结果输入2 3 :5 9 :5 9 后,第二天就与下一天错位了。
使用DATETIME+0时区可以避免这种脑回路。
坦白说,这很令人困惑。
很多人不重视这一点。

一开始我以为BETWEEN是最通用的,后来发现错了。
去年我跑了一个实时监控项目,用BETWEEN查看下一分钟的数据。
这实际上比直接使用 >=NOW() 慢 5 0%。
后来,使用 DATE_ADD(NOW(), INTERVAL 1 MINUTE) 变得很普遍。
等等,还有一件事,使用 DATE_FORMAT 来格式化时间。
不要在大桌子上使用它。
例如,我们有一个百万级别的日志表。
一旦添加了这个功能,索引就会被直接销毁。

提醒:分区表是个好东西,但也有一些局限性值得了解。
例如,如果要按月分区并检查 2 02 2 -02 -01 的数据,请使用 VALUES LESS THAN('2 02 2 -03 -01 ') 作为分区条件。
否则,错误的分区将在二月的最后一天启动。

建议直接对时间字段进行索引,但除非绝对必要,否则在编写条件时不要使用函数。