使用django进行高效查询

时间:2014-09-10 21:04:02

标签: django performance django-queryset

让我们定义这些模型:

class Family(models.Model):
     .....

class Person(models.Model):
     family = models.ForeignKey(Family)
     .....

假设我们有 family_object 这是任何Family实例,所以我们可以通过两种方式找到这个家庭的人:

a) Person.objects.filter(family=family_object)
b) Person.objects.filter(family__id=family_object.id)
哪个更有效率?这种情况有什么规则吗?

1 个答案:

答案 0 :(得分:0)

一些测试显示它们生成相同的数据库查询:

q1 = str(Person.objects.filter(family=family_object).query)
q2 = str(Person.objects.filter(family__id=family_object.id).query)
q3 = str(Person.objects.filter(family_id=family_object.id).query)

q1 == q2 == q3

通过ORM从django对象中拉出id的开销应该非常小。

我实际上有点惊讶..我认为__将是一个加入,而family=family_object将没有加入。两者都不与django 1.6产生联接。

Django知道PK上的__id查找并跳过了连接。凉。