High Perfomance Djangoを読んでとても勉強になったので、備忘録メモ。
クエリの数を減らせ
これをちゃんと使ってね。
開発中は、Django Debug Toolbarで発行クエリを確認。
クエリの実行時間を短く
- indexをきちんと張る
- でかいJoinは避ける
- でかいテーブルにはall()はやめて、LIMITかける
- 存在チェックは
spam.count() > 0
じゃなくて、spam.exists()
で
Foreign Keys
Generic Foreign Keysは便利だけど、裏でパフォーマンス悪いクエリ投げてることある。
自分で外部キー張った方がいい場合も。
cached_propety
実行コストがかかる & 何度も呼ばれるプロパティに対しては、キャッシュが有効。
https://docs.djangoproject.com/ja/1.9/ref/utils/
扱うオブジェクトは小さく
得られる結果がでかい場合は、これらを使ってパフォーマンスあげよう。
クエリキャッシュ
この2つが書籍の中では紹介されてたけど、Jonny Cacheは開発止まってた。
(Django1.5以上では使えなそう...)
自作するなら、gumiのブログで紹介されてるAbstructCachedModelが参考になる。
Djangoでキャッシュ機能付きモデル - gumi Engineer’s Blog