比较日期的最快方法:UNIX_TIMESTAMP 或 FROM_UNIXTIME 或字符串

Cod*_*ode 4 mysql datetime

选择字段大于某个日期的行的最快方法是什么?

WHERE date > FROM_UNIXTIME(12345)
Run Code Online (Sandbox Code Playgroud)

或者

WHERE UNIX_TIMESTAMP(date) > 12345
Run Code Online (Sandbox Code Playgroud)

或者

WHERE date > '2011-05-01 09:00:00'
Run Code Online (Sandbox Code Playgroud)

fth*_*lla 5

最慢的是:

WHERE UNIX_TIMESTAMP(date) > 12345
Run Code Online (Sandbox Code Playgroud)

因为每次都必须为每一行调用 unix_timestamp 函数,并且不会使用日期列上的索引(如果存在)。其他的几乎是等价的:

WHERE date > FROM_UNIXTIME(12345)
WHERE date > '2011-05-01 09:00:00'
Run Code Online (Sandbox Code Playgroud)

函数 from_unixtime 只会被调用一次,即使字符串也只会被解析一次,它不会有任何区别,但我更喜欢最后一个,因为它更具可读性。

当然,不要忘记索引你的日期列:

alter table tablename add index idx_date (date)
Run Code Online (Sandbox Code Playgroud)