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
N+1問題が起きる原因について調べてみた
Search
smallmonkeykey
January 19, 2024
0
41
N+1問題が起きる原因について調べてみた
学習中の者です。
1月11日のOmotesando.rbで、初めてのLTをしました。
smallmonkeykey
January 19, 2024
Tweet
Share
More Decks by smallmonkeykey
See All by smallmonkeykey
投票アプリの反省と新機能
smallmonkeykey
0
59
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Believing is Seeing
oripsolob
1
59
Become a Pro
speakerdeck
PRO
31
5.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
The browser strikes back
jonoalderson
0
420
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
68
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
[SF Ruby Conf 2025] Rails X
palkan
1
760
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Fireside Chat
paigeccino
41
3.8k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
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について学べた!
ご清聴 ありがとうございました!