mysql が次のように使用して datetime をクエリできることがわかりました。
like '2013-06-12%'
インデックスは使えないと思います。私はそれをグーグルで調べましたが、そのような主題を直接見つけることはできません。したがって、3308614 レコードのテーブルを使用したテストがあります。最初の SQL:
SELECT * FROM subscription t WHERE DATE(t.active_time) = '2013-06-30';
この SQL がインデックスを使用できないことはわかっており、結果を取得するのに 4 秒かかります。2 番目の SQL:
SELECT * FROM subscription t WHERE t.active_time LIKE '2013-06-30%';
インデックスが使えるかどうかはわかりませんが、4秒もかかります。3 番目の SQL:
SELECT * FROM subscription t WHERE t.active_time > '2007-11-30' AND t.active_time < '2007-12-01';
3 番目の SQL がインデックスを使用できることはわかっており、0.016 秒かかります。
だから、mysqlは最初にdatetimeフィールドを文字列に変換し、その文字列をlikeコマンドに送信する必要があるため、datetimeフィールドを照会するときに「like」はインデックスを使用できないと思います。これは正しいです ?