Django select_related优化

时间:2016-03-29 12:26:06

标签: django query-optimization django-queryset

我查看了Django为查询运行的查询:

Model.objects.select_related('foo').filter(...)

注意到它看起来像:

    {
    u'time':u'0.056',
    u'sql':u'SELECT 
        "model"."id",
        "model"."foo_id",
        <more model fields>
        "foo"."id",
        "foo"."bar_id",
        <more foo fields>
    FROM "model" 
    INNER JOIN "foo" ON ("model"."foo_id" = "foo"."id") WHERE <filter>
  },
  {
    u'time':u'0.003',
    u'sql':u'SELECT 
        "bar"."id",
        <other fields>
    FROM "bar" WHERE "bar"."id" = 6'
  },
  {
    u'time':u'0.003',
    u'sql':u'SELECT 
        "bar"."id",
        <other fields>
    FROM "bar" WHERE "bar"."id" = 6'
  }
  ... many many more

表示它为相关的ForeignKeys生成加载其他查询。

我有两个问题:

  1. 我要求提供相关的 foo ,并收到 bar
  2. 我可以限制&#39;深度&#39;相关进入?

    1. 大多数(在其他情况下甚至 foo )都指向同一个对象。
    2. 我能以某种方式告诉Django结果是稀疏的&#39;并首先创建一组ID,并仅查询那些?

0 个答案:

没有答案