存在於外鍵和多對多關係
不檢索關聯對象的數據
調用關聯對象會再次查詢數據庫html
查看django orm的數據加載,兩次. 查詢user,查詢menupython
第一次查詢 用戶表 第二次查詢 app表sql
cmd:python manage.py shell #進入shell調試 或者ipython from authorization.models import User users=User.objects.all() print(users.query) #打印sql語句 ,第一次查詢user user=users[0] user_menu=user.menu.all() print(user_menu.query) #第二次查詢menu
預加載單個關聯對象--select_related
!!!預加載多個關聯對象--prefetch_relatedshell
# 懶加載
def lazy_load():
for user in User.objects.all():
print(user.menu.all())數據庫
# 預加載
def pre_load():
for user in User.objects.prefetch_related('menu'):
print(user.menu.all())django
盡少的連接次數,集中查詢app
由於建立和關閉連接的時間和單詞查詢的時間相似,一開一關大大浪費性能性能
避免負優化:測試
使用CONN_MAX_AGE配置限制DB鏈接壽命fetch
CONN_MAX_AGE默認值是0
每一個DB鏈接的壽命保持到該次請求結束
不建議開發模式下使用CONN_MAX_AGE
部署線程數 必定要小於 數據庫最大鏈接數
https://www.cnblogs.com/liwenzhou/p/9245507.html