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
遅い処理を速くするためのティップス集
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
430
密かにバグ管理簿というものを作っている話
furuhashin
0
250
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Automating Front-end Workflow
addyosmani
1370
200k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
How to Ace a Technical Interview
jacobian
278
23k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Producing Creativity
orderedlist
PRO
346
40k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Language of Interfaces
destraynor
158
25k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
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]みたいな
⑤キャッシュしよう • マスター系のデータはほぼ変わることがないので、そのデータへのアクセス数が 大量にある場合はキャッシュするといい
⑥インスタンス変数を活用しよう • バッチ処理等での大量のループ処理の中で毎回キャッシュにアクセスする必要は ない
⑦仕様を見直そう • 毎回全件取得しているのはなぜ?前回との差分で良いのではないか?等