ORM 效率补充
1、only defer
only: 获取数据表中某列或多列的值,注意获取的是对象,如果查询字段不是括号内的,效率反而变低
defer: 获取除了某列或某几列的数据,注意获取的是对象
User.objects.values('id', 'name') User.objects.values_list('id', 'name') ret = User.objects.only('id', 'name') for i in ret: print(i.id, i.nme)
2、selected_related
进行跨表查询的时候,会先进行连表,这里的db是外键的字段
# 查询用户的姓名和部门名称,先链表再查询 result = User.objects.all().seleted_related('dp') for item in result: print(item.name,item.dp.title)
多用于 one2one 或 foreginkey
缺点:链表次数过多,反而会减低查询效率
3、prefecth_related
进行来两次查询,先查询一次,再查询和要查询数据有关的数据
result = User.objects.all().prefetch_related('dp') for item in result: print(item.name,item.dp.title)
多用于 mang2many
4、外键产生的原因
节约硬盘空间
当数据量比较大的时候,不要使用外键,允许数据出现冗余