$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
遅い処理を速くするためのティップス集
Search
furuhashin
November 15, 2022
0
130
遅い処理を速くするためのティップス集
furuhashin
November 15, 2022
Tweet
Share
More Decks by furuhashin
See All by furuhashin
what changed when my position changed
furuhashin
0
220
Split a huge class
furuhashin
0
160
Obsidian is good
furuhashin
0
450
密かにバグ管理簿というものを作っている話
furuhashin
0
250
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Navigating Team Friction
lara
191
16k
Bash Introduction
62gerente
615
210k
GraphQLとの向き合い方2022年版
quramy
50
14k
Facilitating Awesome Meetings
lara
57
6.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
What's in a price? How to price your products and services
michaelherold
246
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Raft: Consensus for Rubyists
vanstee
141
7.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Code Review Best Practice
trishagee
74
19k
Transcript
遅い処理を速くするためのティップス集 Nobukatsu Furuhashi
自己紹介 • @furuhashin • 趣味 • 実生
① N+1回のクエリは排除しよう • 全ての会社をとってきてから、その会社1件ごとに全社員を取得するクエリを発 行するようなやつ
① 解決策 • JOINをして一気にデータを取得する • 全ての会社数が多くない場合は全ての会社のidを取得して社員テーブルでwhere in 句を発行するでもおk • 会社のidが多すぎるとインデックスが効かなくなるので注意
①‘ N+1回の処理も排除しよう • 全ての会社をとってきてから、その会社1件ごとに全社員の画像をファイルサー バから取得する等
①’ 解決策 • まとめて取得する • 取得を遅延させる • URLだけ生成しておいて取得はブラウザでやってもらう等
②クエリを発行する際にインデックスを正しく使用 しよう • EXPLAINで都度確認する癖をつける • 第一候補はwhere句。他にはテーブル結合における条件キーやorder by句のソートキーと なっているカラム
③ループを少なくしよう • 先にループする対象を削減できないか検討する • 同じ配列に対して複数回ループ処理をしていたら1つにまとめる(ループの個数 削減)
④配列の値を検索しないようにしよう • In_array()等 • 検索される側が少ない場合は問題ない
④解決策 • キーで検索できるようにデータを作成しておく • [’apple’ => true]みたいな
⑤キャッシュしよう • マスター系のデータはほぼ変わることがないので、そのデータへのアクセス数が 大量にある場合はキャッシュするといい
⑥インスタンス変数を活用しよう • バッチ処理等での大量のループ処理の中で毎回キャッシュにアクセスする必要は ない
⑦仕様を見直そう • 毎回全件取得しているのはなぜ?前回との差分で良いのではないか?等