MySQL 4.1 リファレンスマニュアル の 「日付と時刻関数」には、 このクエリでは、過去 30 日以内の日付の date_col 値を持つすべてのレコードが選択されます として SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) >= 30; という SQL 文が紹介されているけれども、これって INDEX が使われないわけで。 30日前の日付が他で分かるなら、それを BETWEEN で指定してあげれば、type が range なインデックスが使われる。だから、たとえば SELECT something FROM tbl_name WHERE date_col BETWEEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -30 DAY), '%Y-%m-%d 0