Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ActiveRecordの速度改善Tips2020冬
Search
patorash
November 25, 2020
Programming
0
70
ActiveRecordの速度改善Tips2020冬
patorash
November 25, 2020
Tweet
Share
More Decks by patorash
See All by patorash
情報共有戦略と戦術
patorash
1
1.2k
exists?で起きるN+1問題にSetで対処する
patorash
0
780
DBのメタデータを管理する文化を作る
patorash
0
630
Stimulusのススメ
patorash
0
74
わかった気になる!OpenID Connect
patorash
2
2k
Indexの種類
patorash
1
760
Start-SQLの紹介
patorash
0
720
RailsアプリにGraphQLを導入してみた話
patorash
1
650
Other Decks in Programming
See All in Programming
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
130
GoのGenericsによるslice操作との付き合い方
syumai
2
430
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
770
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
100
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
500
イベントストーミングから始めるドメイン駆動設計
jgeem
4
800
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
140
「兵法」から見る質とスピード
ickx
0
260
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
110
Effect の双対、Coeffect
yukikurage
4
1.3k
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
200
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
120
Featured
See All Featured
Code Review Best Practice
trishagee
68
18k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Documentation Writing (for coders)
carmenintech
71
4.9k
How GitHub (no longer) Works
holman
314
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Gamification - CAS2011
davidbonilla
81
5.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
770
Making the Leap to Tech Lead
cromwellryan
134
9.3k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Transcript
ActiveRecordの 速度改善Tips 2020 冬 株式会社リゾーム システム開発部 尾古 豊明 2020-11-25(水) 社内勉強会
これは2015年に発表した資料の焼き直し 第9回中国地方DB勉強会 IN 米子での発表資料 https://www2.slideshare.net/chariderpato/heroku-active-record-tips
ActiveRecord高速化の肝 DBへのアクセス回数を減らす 大量のデータを一度に取得しない 使うカラムのデータだけ取得する そもそもDBにアクセスしない
適切なindexを設定する
DBへのアクセス回数を減らすには? パフォーマンス監視ツールを使う(rack-mini-profiler) N+1問題の発生を検知するgemを使う(bullet) counter_cacheを使う(Railsにある機能) eager_load, preload,
includes, left_joins, joinsなどのメソッドを使う 大きいテーブルをjoinすると1回のクエリで済むが逆に性能が悪化するケースもあるので注意
大量のデータを取得しないようにするには? find_each, find_in_batches, in_batchesなどのメソッドを使う デフォルトで1,000件ずつ処理する orderが効かないので注意
ページングを行う(kaminari) 存在チェックには、present?ではなく、exists?を使う present?はモデルのオブジェクト作ってしまっているし、全部取得している select * from ~ where ~ exists?はクエリがシンプル select 1 from ~ where ~
使うカラムのデータだけ取得するには? selectメソッドで絞り込む - articles.select(:id, :title).each do |article| =
link_to article.title, article_path(article) end pluckメソッドで値だけ取得する - articles.pluck(:id, :title).each do |(id, title)| = link_to title, article_path(id) end
そもそもDBにアクセスしないには? フラグメントキャッシュなどを使う 1回アクセスしたときの結果をキャッシュして再利用する 頻繁に更新されないもの、且つ頻繁に参照されるものに関して有用(トップページとか) データを更新したときにキャッシュを削除し忘れると事故になるので注意
以上