- 2010-06-23 (水) 14:45
- 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;
かなり早くなるのでお試しください!
いままでのクエリーも書き直さないと・・・・。
関連記事
このブログを書いているsayjiroは最近会社を立ち上げました。小さな小さな会社ですが、一緒に働く仲間を探している今日この頃です。
自由に楽しく仕事をしつつWebを使って面白いことができればと思ってます。
募集している人物像:向上心がある・Webともの作りが好き(ある程度経験があると嬉しいですが、未経験でもやる気があれば可です)
お仕事内容:Web周り全般。サイト制作やデザイン、システム構築やiPhoneアプリ開発などいろいろです。
働く形態:その人に合わせて応相談
→興味がございましたらtwitterやこちらからお気軽にご連絡ください!
コメント:0
トラックバック:2
- この記事のトラックバックURL
- http://sj6.org/mysql_datetime_index_faster/trackback/
- pingback from ITキヲスク | 2010年6/20~6/26の週間ブックマーク 10-06-27 (日) 21:17
-
[...] datetime型のカラムから日付データを引っ張ってくる際の高速化 – 適当な日々 [...]
- pingback from MySQLでdatetime型のカラムから日付データを取り出すメモ | takulab 10-08-20 (金) 1:04
-
[...] よくある。 そんな時に使えそうな情報を見つけたのでメモ。 datetime型のカラムから日付データを引っ張ってくる際の高速化 このサイトによると、 SELECT * FROM item WHERE ‘datetime’ LIKE ‘2010-06- [...]



