MySQLのDATETIME型へインデックスをつける場合注意が必要。
例えばこんなSQLではインデックスが使用されない。
SELECT * FROM `table` WHERE `datetime` LIKE ‘2009-05-17%’
検索結果は2009-05-17分全てが抽出されるが、フルスキャンがかかる。
この場合、以下のようなSQLが良い。
SELECT * FROM `table` WHERE `date_time` BETWEEN ‘2009-05-17′ AND ‘2009-05-17′ + INTERVAL 1 DAY
実行時間計測の例
行数:13,776行
データ:2,935KB
インデックス:datetime
SELECT SUM( `col` ) FROM `table`
WHERE `datetime` LIKE ‘2009-05-17%’
フルスキャン
実行時間:0.0235 秒
SELECT SUM( `col` ) FROM `table`
WHERE DATE(datetime) = ‘2009-05-17′
フルスキャン
実行時間:0.0383 秒
SELECT SUM( `col` ) FROM `table`
WHERE `date_time` BETWEEN ‘2009-05-17′
AND ‘2009-05-17′ + INTERVAL 1 DAY
インデックス使用
実行時間:0.0009 秒

