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
57
ActiveRecordの速度改善Tips2020冬
patorash
November 25, 2020
Tweet
Share
More Decks by patorash
See All by patorash
情報共有戦略と戦術
patorash
1
1k
exists?で起きるN+1問題にSetで対処する
patorash
0
590
DBのメタデータを管理する文化を作る
patorash
0
550
Stimulusのススメ
patorash
0
57
わかった気になる!OpenID Connect
patorash
2
1.6k
Indexの種類
patorash
1
690
Start-SQLの紹介
patorash
0
620
RailsアプリにGraphQLを導入してみた話
patorash
1
610
Other Decks in Programming
See All in Programming
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
110
Open Source Swift Workshop - Foundation and first party libraries
ikesyo
0
1.1k
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
250
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
230
Folding Cheat Sheet #1
philipschwarz
PRO
0
210
せっかくモデル図描くのなら、嬉しいことが多い方がいいよね!
kuboaki
1
3.1k
"config" ってなんだ? / What is "config"?
okashoi
0
210
Creating Retro-Style Photos Using Swift
ski
1
900
Why 1 + 1 = 2 in Swift?
1plus4
1
600
What We Can Learn From OSS
inouehi
0
380
今、知っておきたい! 生成AIエージェントの世界
elith
3
330
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
410
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
13
1.5k
Code Reviewing Like a Champion
maltzj
513
39k
Clear Off the Table
cherdarchuk
82
310k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
In The Pink: A Labor of Love
frogandcode
137
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
115
18k
GitHub's CSS Performance
jonrohan
1023
450k
What the flash - Photography Introduction
edds
64
11k
Creatively Recalculating Your Daily Design Routine
revolveconf
209
11k
The Brand Is Dead. Long Live the Brand.
mthomps
48
27k
Designing with Data
zakiwarfel
95
4.8k
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回アクセスしたときの結果をキャッシュして再利用する 頻繁に更新されないもの、且つ頻繁に参照されるものに関して有用(トップページとか) データを更新したときにキャッシュを削除し忘れると事故になるので注意
以上