次の2つのmysqlクエリがあるとします。
SELECT * FROM table1 WHERE DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()
と
SELECT * FROM table1 WHERE DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn
どのクエリが高速になりますか?
datetimecolumn
2番目は、インデックス操作で直接使用できるため、かなり高速になるはずです。インデックスがなければ、違いは無視できるはずです (時間操作と関数呼び出しは、ディスクからのデータ取得よりもはるかに高速です)。
2 つのクエリは同等ではありません (同じレコードは返されません)。
DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()
今から 24 時間より新しいレコードを取得します (つまり、昨日以降に挿入されたすべてのレコード)。
二番目
DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn
現在から 24 時間以上前 (2 日以上前) のレコードを取得します。
その場合、どちらのクエリが高速かというと、答えはレコードの数に依存します...
The below will be fast.
The below one could apply the index of datetimecolumn
, while the above one could not.
DATE_SUB(NOW(),INTERVAL 24 HOUR)
only need to be calculated once, while DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)
need to do with every records.