日付時刻列を含むテーブルがあります。時刻に関係なく、特定の日のすべてのレコードを返したいと考えています。言い換えると、テーブルに次の 4 つのレコードのみが含まれている場合、2012-12-25 に制限すると、2 番目と 3 番目のレコードのみが返されます。
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
ベストアンサー1
絶対に次のようなセレクターを使用する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'
答えの要点、つまり計算された式でのセレクターの回避は、もちろん依然として有効です。