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
450
密かにバグ管理簿というものを作っている話
furuhashin
0
250
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
The Cult of Friendly URLs
andyhume
79
6.6k
Unsuck your backbone
ammeep
671
58k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Side Projects
sachag
455
43k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
590
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
GitHub's CSS Performance
jonrohan
1032
470k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Designing Experiences People Love
moore
142
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
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]みたいな
⑤キャッシュしよう • マスター系のデータはほぼ変わることがないので、そのデータへのアクセス数が 大量にある場合はキャッシュするといい
⑥インスタンス変数を活用しよう • バッチ処理等での大量のループ処理の中で毎回キャッシュにアクセスする必要は ない
⑦仕様を見直そう • 毎回全件取得しているのはなぜ?前回との差分で良いのではないか?等