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、外键产生的原因

节约硬盘空间

当数据量比较大的时候,不要使用外键,允许数据出现冗余

原文地址:https://www.cnblogs.com/wt7018/p/11553636.html