Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
N+1問題が起きる原因について調べてみた
Search
smallmonkeykey
January 19, 2024
51
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
N+1問題が起きる原因について調べてみた
学習中の者です。
1月11日のOmotesando.rbで、初めてのLTをしました。
smallmonkeykey
January 19, 2024
More Decks by smallmonkeykey
See All by smallmonkeykey
投票アプリの反省と新機能
smallmonkeykey
0
65
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
It's Worth the Effort
3n
188
29k
Building an army of robots
kneath
307
47k
WCS-LA-2024
lcolladotor
0
840
We Have a Design System, Now What?
morganepeng
55
8.4k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
Evolving SEO for Evolving Search Engines
ryanjones
0
310
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The untapped power of vector embeddings
frankvandijk
2
1.9k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
460
Transcript
N+1問題が起きる原因に ついて調べてみた 2024/1/11
自己紹介 リサ ・現在fjordbootcampで学習中 ・好きな生き物は犬と猿
なぜN+1について話すのか ・Ruby on Railsの課題で毎度N+1問題に指摘される ・指摘されるまで気づかない → 理解できていない
・each を使う時にN+1がこのままじゃ起きるよ!とレ ビューを頂いている印象 学習前のイメージ ・each文に原因があるのでは!?
テーブル
関連付け user.rb article.rb
article.titleの場合のSQL Article Load (0.5ms) SELECT "articles".* FROM "articles"
article.user.name の場合のSQL Article Load (0.5ms) SELECT "articles".* FROM "articles" 1回
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]] N回(ここでは3回)
結果 each文がN+1を引き起こす原因なのではなく、 each文の中で、articleに紐づいている、userのデータを毎回取得しにいってい ることが原因
LTの準備を通して気づいたこと
自分が今つまづいている部分だけを切りとる ・FBCの課題をしていると、全体的なコード量が多いので複雑になって しまう ・自分がわからないところだけをピックアップした、最小限のアプリ ケーションを作成する
わからないを放置しない ・FBCにいると早く課題を進めた方が良いのではという気持ちががあって先 走ってしまい、一つ一つを丁寧に理解することがおろそかになっていた ・遠まりが一番の近道 ・自分の中に、質問係をつくり、質問してもらい、それに答えられるかという のをする 答え N+1はなぜ起こるの?
LTに参加ボタンを押すと良いことがある ・【RubyでつくるRuby ゼロから学びなおすプログラミング言語入門】 → 積読してあった本を読んだ! ・再帰 について調べた → 新しい知識を得られた! ・rubyでリップ(口紅)の色を調べてみた → 新たなgemについて学べた!
ご清聴 ありがとうございました!