代码之家  ›  专栏  ›  技术社区  ›  Felipe Hoffa

appengine:needindexerror:对于这个查询和您的数据,内置索引的效率不够。请为此查询添加复合索引

  •  2
  • Felipe Hoffa  · 技术社区  · 15 年前

    使用django.core.paginator import-objectpaginator时,出现以下错误:

    NeedIndexError:内置索引 效率不够 查询和您的数据。请添加一个 此查询的复合索引。

    原始查询的格式如下:

    query = models.Cdr.all()
    query.filter("var1 =", var1 )
    query.filter("var2 =", var2)
    query.filter("var3 =", var3)
    

    当ObjectPaginator试图计算元素的数目,但只计算 VAR1 .

    为什么这个查询对于 VAR1 ,同时与他人合作?

    你对这个案子有什么建议?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Alex Martelli    15 年前

    建议修复的一般程序 NeedIndexError 出现次数为 this one . 我预计根据数据的数量和结构,复合索引可能没有建立在您的开发之上(根据 var1 值),但事实证明在实际存储上运行时是必需的(为了避免由于效率原因而中止查询,如错误消息提示和nick在此注释中确认的那样)。

        2
  •  1
  •   Community CDub    7 年前

    我碰到这个问题了。问题不在于您的代码,而在于GAE的索引系统本身。要修复它,必须在index.yaml文件中显式写入索引。这对我很有用,但我 read elsewhere 明确定义索引的方法可能并不总能修复它。不管怎样,我建议你 star the bug I opened .

    GAE不会自动为只有相等过滤器的查询构建索引。相反,它使用谷歌称之为“之字形合并连接”(google it)的算法。这种算法似乎在某些情况下会失效。看起来像谷歌团队 is working on 解决了这个问题,但在某些情况下它仍然会弹出。