MySQLチューニング
今週はちめちめとDBのチューニングしております。
実際のサイトの速度はこんな感じ
http://moeten.info/maidcafe/i/
せっかくなのでMySQLを早くしたいときに気を付けるポイントです。
- インデックスを作成する
プライマリーキーやインデックスはとりあえず貼っておく。AUTO_INCREMENTも便利なので設定しておく。
- WHERE句でよく使われるカラムに複数インデックスを作成する
複合インデックスは知っておいて損はなし。インデックスを貼る順番にも気を付ける。けっこうキリがない。
- DELETEは遅いので使わない。
なるべくUPDATE hoge SET print = 0 などを使用する。
- EXPLAINでSQL文がどのように探索されているか解析する。
keyが使われていることとrowsの合計件数が少なくなるようにする。rowsはおそらく掛け算で合計行数。
- テーブル結合時にSTRAIGH_JOINを使用してテーブルの結合順を指定する
EXPLAINによって表示されるrowsの件数が変わる。なるべくrowsの件数が少なくなるようにテーブルを結合させる。
- LEFT JOINを検討する。
LEFT JOIN を使用すると普通にテーブルを結合するよりも早い場合がある。
- LEFT JOINをする際 STRAIGH_JOIN をつけた方が早い場合がある。つけないほうが早い場合もある。
こちらでテーブルの並びを指定するよりMySQLのほうが賢い場合がある。
- SQL_CALC_FOUND_ROWSは便利だけど処理が遅くなる場合がある
その場合は件数取得用SQL別に書く。そしてPHPでmysql_num_rowsで件数を取得する。
- LEFT JOINする際 SQL_CALC_FOUND_ROWS が無視される場合があるのでなるべく一緒に使用しない。
バージョンによるバグ?
SQLにかかる時間が0.2秒くらいだと静的ページにアクセスしている感じ。
0.1秒以上かかるSQLはメールで送ったりすると便利かも?
あ、自分はデーターベース屋さんじゃないので、なにかいいポイントがあったら教えて欲しいです。
MySQLは日付の足し算とかできるので面白いですよー
チューニングで参考になる本。Amebaの中の人の本。
- 作者: 佐藤真人,桑野章弘,岡田達典,大黒圭祐
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2009/09/17
- メディア: 大型本
- 購入: 8人 クリック: 242回
- この商品を含むブログ (19件) を見る