Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
遅い処理を速くするためのティップス集
Search
furuhashin
November 15, 2022
0
120
遅い処理を速くするためのティップス集
furuhashin
November 15, 2022
Tweet
Share
More Decks by furuhashin
See All by furuhashin
what changed when my position changed
furuhashin
0
210
Split a huge class
furuhashin
0
160
Obsidian is good
furuhashin
0
390
密かにバグ管理簿というものを作っている話
furuhashin
0
230
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
65
4.5k
4 Signs Your Business is Dying
shpigford
181
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Designing for Performance
lara
604
68k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
YesSQL, Process and Tooling at Scale
rocio
169
14k
The Pragmatic Product Professional
lauravandoore
31
6.3k
[RailsConf 2023] Rails as a piece of cake
palkan
52
5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Optimizing for Happiness
mojombo
376
70k
Thoughts on Productivity
jonyablonski
67
4.3k
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]みたいな
⑤キャッシュしよう • マスター系のデータはほぼ変わることがないので、そのデータへのアクセス数が 大量にある場合はキャッシュするといい
⑥インスタンス変数を活用しよう • バッチ処理等での大量のループ処理の中で毎回キャッシュにアクセスする必要は ない
⑦仕様を見直そう • 毎回全件取得しているのはなぜ?前回との差分で良いのではないか?等