MySQL5.5以降 sjis環境でDATETIMEにindexが効かず遅い
MySQLを5.6にバージョンアップした際に、一部のクエリがやたら遅くなってしまい困りました。 散々ggった結果、ヒットした情報が以下。
character_set_connection = sjis でDATETIME型のカラムにインデックスがきかないはなし
http://bugs.mysql.com/bug.php?id=74449
なんと、character_set_connection = sjis の場合に限ってDATETIME型,DATE型カラムに誤った型変換が行われるらしい。 sjisなんてやめなはれ、は正論ですが、残念ながらsjisを捨てられるシステムではないので、以下のようにCASTで対処。
date型の場合
AND dl.date >= '2014-08-10'
↓
AND dl.date >= cast('2014-08-10' as date)
datetime型の場合
AND dl.date >= '2014-08-10'
↓
AND dl.date >= cast('2014-08-10' as datetime)
ご参考まで。