2

次の2つのmysqlクエリがあるとします。

SELECT * FROM table1 WHERE DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()

SELECT * FROM table1 WHERE DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn

どのクエリが高速になりますか?

4

2 に答える 2

2

あなたが知りたいと思うこと:

datetimecolumn2番目は、インデックス操作で直接使用できるため、かなり高速になるはずです。インデックスがなければ、違いは無視できるはずです (時間操作と関数呼び出しは、ディスクからのデータ取得よりもはるかに高速です)。

あなたが本当に尋ねたこと:

2 つのクエリは同等ではありません (同じレコードは返されません)。

DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()

今から 24 時間より新しいレコードを取得します (つまり、昨日以降に挿入されたすべてのレコード)。

二番目

DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn

現在から 24 時間以上前 (2 日以上前) のレコードを取得します。

その場合、どちらのクエリが高速かというと、答えはレコードの数に依存します...

于 2012-11-01T11:44:01.687 に答える
1

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.

于 2012-11-01T11:42:45.593 に答える