应用程序所进行的每个数据库查询都需要对应的索引。简单查询(例如单个属性的查询)的索引会自动创建。复杂查询的索引必须在名为 index.yaml 的配置文件中进行定义。该文件使用应用程序上传,以便在数据库中创建索引。
当应用程序尝试执行需要索引的查询,但该索引在配置文件中没有相应的条目时,开发网络服务器 (dev_appserver.py) 会自动向该文件添加项目。您可以通过编辑文件调整索引或手动创建新索引。
提示:如果应用程序进行的每个查询都使用开发网络服务器进行了测试,那么在 index.yaml 中生成的条目将是完整的。如果应用程序进行需要索引的查询,而所需的索引未在开发网络服务器上测试,您只需手动编辑文件即可。
有关索引的详细信息,请参阅查询和索引。
以下是 index.yaml 文件的示例:
indexes:
- kind: Cat
ancestor: no
properties:
- name: name
- name: age
direction: desc
- kind: Cat
properties:
- name: name
direction: asc
- name: whiskers
direction: desc
- kind: Store
ancestor: yes
properties:
- name: business
direction: asc
- name: owner
direction: asc
index.yaml 的语法为 YAML 格式。有关该语法的详细信息,请参阅 YAML 网站。
提示:YAML 格式支持注释。以井号 (#) 字符开头的行会被忽略:# This is a comment.
index.yaml 具有名为indexes的单独列表元素。列表中的每个元素代表应用程序的一个索引。
索引元素可以有以下元素:
kind查询的实体类型。通常情况下,这是定义实体的模型的 Model 类的名称。该元素为必需的元素。
properties要作为索引的列包含的属性列表排列顺序如下:先是等效过滤器中使用的属性,后面是不等效过滤器中使用的属性,然后是排列顺序及其方向。
该列表中的每个元素都有以下元素:
name属性的数据库名称。
direction排序方向,asc 代表升序,desc 代表降序。只有查询的排列顺序中使用的属性才需要它,且必须与查询使用的方向匹配。默认为 asc。
ancestor如果查询有祖先子句(Query.ancestor() 或 GQL ANCESTOR IS 子句),则为 yes。默认为 no。
当开发网络服务器向 index.yaml 添加生成的索引定义时,它也在以下行执行同样的操作,并在必要时将其插入。
# AUTOGENERATED
开发网络服务器将该行下方的所有索引定义视为自动,且可能在应用程序进行查询时更新该行下的现有定义。
该行上方的所有索引定义被视为手动控制,不由开发网络服务器进行更新。网络服务器只会在行下方进行更改,而且只有当整个 index.yaml 文件没有说明应用程序所执行的查询的索引时才这样做。要控制自动索引定义,请将其移到该行上方。