ホーム > タグ > 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;

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

関連記事

CentOSにMySQL,Apache,PHPをソースからインストール

自宅での開発環境を整えたいと思い立ち、VMwareにCentOSを入れ、MySQL、apache、PHPをインストールした。

慣れているし柔軟なので、ソースから。

インストールするときにいろいろ足りないと聞かれて、yumでインストールしたものが大量にあった。次回は以下のコマンドで一発なはず。

yum install gcc gcc-c++ openssl-devel libxml2-devel.i386 curl-devel.i386 libjpeg-devel.i386 libpng-devel.i386 libgif-devel.i386 libmcrypt-devel.i386 ncurses-devel.i386 expat-devel

ではそれぞれ入れていきます。

Continue reading

関連記事

phpとMySQLとapacheのコンパイル

サーバ立ち上げにあたり、apache,php,mysqlを入れたので、そのメモ。

apache

./configure --prefix=/usr/local/apache2 --enable-ssl --enable-rewrite --enable-so

PHP

./configure --enable-mbstring --enable-soap --enable-zend-multibyte --with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-curl --with-curlwrappers --with-gd \
--with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-zlib-dir=/usr/lib --with-mcrypt

MySQL

./configure --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql --with-innodb --prefix=/usr/local/mysql

関連記事

Home > Tags > MySQL

フィードとか

ページの上へ