facebook twitter hatena line google mixi email

Mysql/sql速度改善

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

count(id)などよりcount(*)としたほうが速い。

select count(id) from table1 where user_id = 1 and del_flag = 1; -- 遅い
select count(id) from table1 where user_id = 1 and del_flag = 1; -- 速い

上の例で条件にidが入っていれば速度は同じになる

slow.logを設定してチューニング

mysql/slow.log設定 [ショートカット]

日付検索はbetweenが速い(12万件入れて検証

SELECT count(*) FROM test WHERE date >= '2010-07-04 00:00:00' AND date <= '2010-07-04 23:59:59';
0.05s

SELECT count(*) FROM test WHERE DATE_FORMAT(date, '%Y-%m-%d') = '2010-07-04';
0.11s

SELECT count(*) FROM test WHERE date like '2010-07-04%';
0.06s

日付期間取得時

SELECT * FROM contents WHERE created BETWEEN '2013-01-17' AND '2013-01-17' + INTERVAL 10 DAY

参考 http://perl.no-tubo.net/2009/05/18/mysql-datetime%E5%9E%8B%E3%81%B8%E3%81%AEindex%E6%B3%A8%E6%84%8F%E7%82%B9/

日時はdatetimeでなくintに

created
updated

はdatetimeやtimestamp型でなくintにした方が3倍程度速い。

参考 http://fukaoi.org/2009/06/10/mysql_datetime

queryログを出力追加

my.cnf

[mysqld]
log=D:\xampp\mysql\log\query.log

sql速度改善リンク集

  • SQLを速くするぞ

http://www.geocities.co.jp/mickindex/database/db_optimize.html

  • MySQLを高速化する10の方法 Add Star

http://nippondanji.blogspot.com/2009/02/mysql10.html