Mysql

是否使用 mysql 中的索引對 UNIX_TIMESTAMP 進行查詢?

  • November 7, 2012

如果我使用

.. WHERE UNIX_TIMESTAMP(`some_timestamp`)>NOW()

在 SELECT 中,此查詢是否仍然在設置上的索引上使用some_timestamp

不可以。到目前為止,所有 MySQL 版本中的優化器都不能對這種情況使用索引。它是不可分割的

如果您希望它能夠使用索引,則必須使用函式來重寫/反轉您的條件,以便在列上不應用任何函式:

WHERE some_timestamp > ReverseFunctionOf_UNIX_TIMESTAMP( NOW() )

使用什麼,取決於列some_timestamp數據類型。


如果它是 a TIMESTAMP,您可以簡單地使用

WHERE some_timestamp> NOW()

如果some_timestamp是一個INT儲存 Unix 時間戳(自 以來的秒數'1970-01-01 00:00:00'),我認為你有正確的功能,但在錯誤的地方。你應該使用:

WHERE some_timestamp > UNIX_TIMESTAMP( NOW() )

或等價物:

WHERE some_timestamp > UNIX_TIMESTAMP()

檢查 MySQL 文件:DATETIME函式

引用自:https://dba.stackexchange.com/questions/28310