MySQL DATETIME型へのINDEX注意点
MySQLのDATETIME型へインデックスをつける場合注意が必要。
例えばこんなSQLではインデックスが使用されない。
SELECT * FROM検索結果は2009-05-17分全てが抽出されるが、フルスキャンがかかる。 この場合、以下のようなSQLが良い。table
WHEREdatetime
LIKE '2009-05-17%'
SELECT * FROMtable
WHEREdate_time
BETWEEN '2009-05-17' AND '2009-05-17' + INTERVAL 1 DAY
実行時間計測の例
行数:13,776行
データ:2,935KB
インデックス:datetime
SELECT SUM(col
) FROMtable
WHEREdatetime
LIKE '2009-05-17%'
フルスキャン
実行時間:0.0235 秒
SELECT SUM(col
) FROMtable
WHERE DATE(datetime) = '2009-05-17'
フルスキャン
実行時間:0.0383 秒
SELECT SUM(col
) FROMtable
WHEREdate_time
BETWEEN '2009-05-17' AND '2009-05-17' + INTERVAL 1 DAY
インデックス使用
実行時間:0.0009 秒
-
前の記事
DBIでMysql を使う時の文字コード指定 2009.04.11
-
次の記事
Webmin ファイルマネージャの文字化け解消 2009.07.01