Home > MySQL

MySQL に関する記事

datetime型のカラムから日付データを引っ張ってくる際の高速化

ちょっとMySQLのチューニングをしたらすごく早くなったので、メモメモ。

datetime型のカラムから日付のみをwhere訳にデータを引っ張ってくることはよくあります。
で、レコードが数万行になってくるとけっこう遅くなったりする。
そしてカラムにインデックスを張っても全然速度があがらなかったりします。
これはクエリーがインデックスを使用していないからなんですね。
苦しまぎれにdate型のカラムを作って日付だけを入れるという手法もありますが、ちょっとスマートじゃないです。
datetime型を維持したままで高速化できます。

例えばこういうクエリー

SQL

select * from item where 'datetime' like '2010-06-23%';

あとはこんなクエリー

SQL

select * from item where 'datetime' >= '2010-06-23 00:00:00' and 'datetime' <= '2010-06-23 23:59:59';

後者の方がちょっとマシですが、どちらもインデックスを見ていないので、レコード数が増えるにつれてだんだんと重くなってきます。
このクエリーをこうしてあげましょう。

SQL

select * from item where 'datetime' between '2010-06-23 00:00:00' and '2010-06-23 23:59:59';

between datetime型 and datetime型の文体にすることでインデックスが使用され、高速化するんですね。
こんな書き方もできます。

SQL

select * from item where 'datetime' between '2010-06-23' and '2010-06-23' + interval 1 day;

かなり早くなるのでお試しください!
いままでのクエリーも書き直さないと・・・・。

関連記事

ホーム > MySQL

フィードとか

ページの上へ