MySQL中INT类型毫秒时间戳的昨日数据查询优化咨询
优化方案
针对毫秒级时间戳(INT类型)的昨日数据查询,推荐以下几种更简洁高效的写法:
1. 利用UNIX_TIMESTAMP和CURDATE简化转换
SELECT * FROM A WHERE time1 >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY) * 1000 AND time1 < UNIX_TIMESTAMP(CURDATE()) * 1000;
CURDATE()直接返回当前日期(如2023-11-06),比DATE(SYSDATE())更简洁;UNIX_TIMESTAMP(date)将日期转换为秒级时间戳,乘以1000即可得到毫秒级时间戳,避免手动计算24*3600*1000这类易出错的表达式。
2. 指定具体日期范围的写法
如果需要查询固定日期区间(比如[2023-11-05 00:00:00, 2023-11-06 00:00:00)),可以直接传入日期字符串:
SELECT * FROM A WHERE time1 >= UNIX_TIMESTAMP('2023-11-05') * 1000 AND time1 < UNIX_TIMESTAMP('2023-11-06') * 1000;
额外说明
以上写法均不会对time1列进行函数操作,因此如果该列存在索引,查询可以正常利用索引提升效率,这比将time1转换为日期再比较的写法性能更优(后者会导致索引失效)。
内容的提问来源于stack exchange,提问作者Capybara99
相关产品推荐
相关产品推荐

