Home > MySQL
MySQL に関する記事
datetime型のカラムから日付データを引っ張ってくる際の高速化
- 2010-06-23 (水)
- MySQL
ちょっと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;
かなり早くなるのでお試しください!
いままでのクエリーも書き直さないと・・・・。
- Comments: 0
- Trackbacks: 2
関連記事
ホーム > MySQL



