1. 正常查询: ## 效率低,因为每次查询都是查询表和关联表的所有数据 ret = User.objects.all() for item in ret: print(item.name,item.dp.title) 2. seleted_related -- 主动做连表查询 (1次连表) ret = User.objects.all().seleted_related('dp') for item in ret: print(item.name,item.dp.title)
问题:如果连表过多,性能只会越来越差
3. prefetch_related -- 2次单表查询 # 第一次 : select * from user; # 通过 python 代码获取:dp_id = [1,2]; # 第二次 : select * from depart where id in dp_id; ret = User.objects.all().prefetch_related('dp') for item in ret: print(item.name,item.dp.title)