MySQL DATETIME型へのINDEX注意点

MySQL DATETIME型へのINDEX注意点

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 秒