決して DATE(datecolumns) = '2012-12-24'
のようなセレクターを使用します -パフォーマンスキラーです:
-
DATE()
を計算します 一致しない行を含むすべての行 - クエリにインデックスを使用できなくなります
使用する方がはるかに高速です
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
これにより、計算なしでインデックスを使用できるようになります。
編集
Used_By_Alreadyが指摘しているように、2012年の最初の回答以来、MySQLのバージョンが登場し、1日の終わりとして「23:59:59」を使用することはもはや安全ではありません。更新されたバージョンは読む必要があります
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
もちろん、答えの要点、つまり計算された式でのセレクターの回避は依然として有効です。