MySQL5以降で SYSDATE() 使うと大抵の場合は遅くなる
豆これ知識な。
理由はMySQLリファレンスマニュアルの「11.5. 日付時刻関数」を読めばわかるけど
SYSDATE() は、それが実行された時間を戻します。これは NOW() の動作によって異なり、ステートメントが実行を開始する時間を示す定数時間を戻します。
ちなみに NOW() は
NOW() は、ステートメントが実行を開始する時間を示す定数時間を戻します。
つまり MySQL5 以降の SYSDATE() はステートメント内で実行される度に実行された時間を返さなきゃいけないので、WHERE区に書いたりしたら悲惨なことになる。
以下、遅くなる例。
SELECT COUNT(*) FROM unk_table WHERE created_on > SUBDATE(SYSDATE(), 1);
テーブルにあるレコード件数分だけ SYSDATE() が実行される。
SELECT COUNT(*) FROM unk_table WHERE created_on > SUBDATE(NOW(), 1);
NOW() だとステートメントが実行を開始した時間になるので
SELECT COUNT(*) FROM unk_table WHERE created_on > SUBDATE('2007-08-13 16:00:00'/* ←実行開始した時間 */, 1);
こういう SQL とほぼ同じパフォーマンスになるはず。