rails開発でActiveRecordを闇雲に使わずにパフォーマンスのことまで考えよう
Active Recordをただ、なんとなく使っている人いたら危険なのでやめましょう。
$ rails console > Hoge.group(:name).explain
てきとうなコードは、いつか悪夢を生む日がきます。
explainメソッドは便利なので、たくさん使ってクエリチューニングしていきましょう。
explain の説明は他の人がきれいにまとめているのでここでは書かない。
ただし、重要なことは、キーワードへの気持ち悪さを感じることだと思う。
例えば、 type
に関していうと、これはSQLによってアクセスしていくタイプなので、インデックスをちゃんと使っているの?などがわかる。
また、その次に目に止まってほしいのが Extra
である。
チューニング方法は色々とあるが、手っ取り早いのがActiveRecord自体の修正になる。これは、explainを打ちながら良さそうなのを求めていけば良い。
次に手っ取り早いのが、簡単な話DDLの変更になる。 show index from hoge;
などで Cardinality
を見て、行数が多いのならば、indexを貼っておいてもよいのだが、例えば47都道府県のように47件しかないようなデータにindexをはっても効果は期待できない。つまり、indexを参照するための時間も無駄になるような件数のものにindexを貼ってもしょうがない。
初心者のうちは、Cardinalityの高いcolumnにindexを貼り、そうでないところにindexを貼っているならば、その箇所の仕様書を見るか、その理由をリーダーにヒアリングしたほうがよい。もしかしたら、カーディナリを想定せずにindexつけたエンジニアのミスだったりする。
その次にチューニングしていきたいならば、複合indexなどを勉強しなくてはならないが、書くことが多すぎるので一旦ここでやめておこうと思う。また時間があるときに書く。
念の為、最後に書いておくこととしては、indexを貼りすぎるとデータをいじるときにパフォーマンスが悪化するので、注意。
自分の書いたコードがスロークエリなんていうところに吐き出されないようなエンジニアになりましょう、ということですね。
なお、このあたりの内容は、以下の本を読めば理解できるので、さらなるステップとしてぜひ新人、あるいはさほどこのあたりの内容を曖昧なままにしているエンジニアには読んでおくのもおすすめです。
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2012/03/16
- メディア: 単行本(ソフトカバー)
- 購入: 21人 クリック: 316回
- この商品を含むブログ (24件) を見る