As we mentioned, App Engine maintains two indexes for every single property of every entity kind, one with values in ascending order and one with values in descending order. App Engine builds these indexes automatically, whether or not they are mentioned in the index configuration file. These automatic indexes satisfy the following kinds of queries using consecutive rows:
A simple query for all entities of a given kind, no filters or sort orders
One filter on a property using the equality (
Filters using greater-than or less-than operators
<=) on a single property
One sort order, ascending or descending, and no filters, or with filters only on the same property used with the sort order
Filters or a sort order on the entity key
Kindless queries with or without key filters
Let’s look at each of these in action.
The simplest datastore query asks for every entity of a given
kind, in any order. Stated in GQL, a query for all entities of the kind
Player looks like this:
SELECT * FROM Player
App Engine maintains an index mapping kinds to entity keys. This index is sorted using a deterministic ordering for entity keys, so this query returns results in “key order.” The kind of an entity cannot be changed after it is created, so this index is updated only when entities are created and deleted.
Since a query can only refer to one kind at a time, you can imagine this index as simply a list of entity keys for each kind.