懶加載
存在于外鍵和多對多關系
不檢索關聯對象的數據
調用關聯對象會再次查詢數據庫
問題根源
查看django orm的數據加載,兩次. 查詢user,查詢menu
第一次查詢 用戶表? 第二次查詢 app表
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_related
性能對比:測試時 預加載快了三倍左右
# 懶加載
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())
長鏈接
盡少的鏈接次數,集中查詢
因為創建和關閉鏈接的時間和單詞查詢的時間類似,一開一關大大浪費性能
避免負優化:
使用CONN_MAX_AGE配置限制DB連接壽命
CONN_MAX_AGE默認值是0
每個DB連接的壽命保持到該次請求結束
不建議開發模式下使用CONN_MAX_AGE
部署線程數 一定要小于 數據庫最大連接數
django-debug-toolbar
https://www.cnblogs.com/liwenzhou/p/9245507.html