django模型层优化(关联对象) 懒加载和预加载 +长链接

懒加载

存在于外键和多对多关系
不检索关联对象的数据
调用关联对象会再次查询数据库


问题根源


查看django orm的数据加载,两次. 查询user,查询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())

长链接

尽少的链接次数,集中查询

因为创建和关闭链接的时间和单词查询的时间类似,一开一关大大浪费性能

猜你喜欢

转载自www.cnblogs.com/du-jun/p/10555094.html
今日推荐