App Engine数据存储区 - 索引优化

时间:2015-04-07 15:55:12

标签: google-app-engine google-cloud-datastore

假设我有两个查询要运行:

# Q1
Chair.query(ndb.AND(Chair.type == 'A', Chair.invented_at < '2014'))

# Q2
Chair.query(ndb.AND(Chair.type == 'A', Chair.cost == 2, Chair.invented_at < '2014'))

Q1和Q2有一个不等式过滤器,因此这些查询需要复合索引。

开发服务器自动生成的索引将包含两个索引,每个索引一个索引。

# Index for Q1
- kind: Chair
  properties:
  - name: type
  - name: invented_at

# Index for Q2
- kind: Chair
  properties:
  - name: type
  - name: cost
  - name: invented_at

但是,在存储和写入操作方面,仅使用第二个索引(Q2)并修改Q1(在某些情况下可能是这样)可能更有效率,因此它也使用Q2索引吗?或者数据存储区是否更容易使用更小但更多的索引?

这个问题完全是假设的,我只是想知道数据存储区会如何反应。

1 个答案:

答案 0 :(得分:0)

数据存储区从不计算任何内容,它实际上只是读取索引中显示的顺序。

Q2指数中间的成本存在意味着Q1无法使用它。就这么简单。它按类型排序,然后是成本,然后是invented_at。我知道系统可以读取它所需的内容,但是不会跳过列。

如果需要,有zigzag merge join算法有助于最小化索引数,但在这种情况下则不行。您还可以获得更多信息here