假设我有两个查询要运行:
# 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索引吗?或者数据存储区是否更容易使用更小但更多的索引?
这个问题完全是假设的,我只是想知道数据存储区会如何反应。
答案 0 :(得分:0)
数据存储区从不计算任何内容,它实际上只是读取索引中显示的顺序。
Q2指数中间的成本存在意味着Q1无法使用它。就这么简单。它按类型排序,然后是成本,然后是invented_at。我知道系统可以读取它所需的内容,但是不会跳过列。
如果需要,有zigzag merge join算法有助于最小化索引数,但在这种情况下则不行。您还可以获得更多信息here