Rails Optimization Points

ruby on rails 最適化要点メモ

1. DBテーブルに適切にインデックスが張られているか?

インデックスを設定するにあたって、データ取得条件(クエリのWHERE句)に注目すること。
また実行計画解析(explain)を活用し、実際にインデックスが有効になっているか確認すること。

以下のようにして、AvtiveRecordのexplain機能を利用することもできる。

User.where(:id => 1).joins(:posts).explain

2. キャッシュが有効に働いているか?

静的ファイルをブラウザ側でキャッシュする、Webブラウザとして nginx を採用する等。
またMemoryStore、MemCacheStore等、ActiveSupportで提供されるRails標準のキャッシュ機構を利用する。

3. DBから不必要にレコードセットを取得していないか?

レコードセットの内容に不必要なものがある場合は、より適切なレコードセット内容に改め、 内容が重複しているにもかかわらず何度も同じデータを引いている場合は、データ取得自体を止める。

4. N + 1 問題等が発生していないか?

N + 1 問題が発生している場合は、レコードセット取得時にテーブル同士の内積を取るようなクエリになるように書き直すこと。
N + 1 問題が起きているかどうか調べるには、bullet (https://github.com/flyerhzm/bullet) 等のツールを利用する。


参考サイト:
http://www.infiniteloop.co.jp/blog/2011/03/mysql-index-explain/
http://www.hitachi.co.jp/Prod/comp/soft1/manual/ws/c3F5500/EEXD0043.HTM

WEB+DB PRESS Vol.70 (技術評論社)「実践Rails高速化」