Hello Richard,
I referred you to the best practices because depending on your use case any one of them might be the key to your performance issues. In Cloud Datastore there are only 2 factors that determine the speed of your query.
The first of those is indexing, keeping in mind that you cannot do a query without an index existing for that query. By default every single property of your entities has two indexes created for it, one for ascending and one for descending. Any query using only one of these fields will be fast and no further optimization is required.
If your query combines 2 fields or more with equality filters, as is the case in your example, those single property indexes will be queried separately and then merged, which is not a fast operation. That is why you need to make sure that you not only have indexes for both of those properties, but you also need to have a composite index explicitly defined with active and model in that order for your MyModel kind.
So something that could explain the difference in speed is if you do not have an explicit composite index for the slow query, but do have one for the fast query.
The second factor that determines the speed of your query is the total size of the dataset returned by your query. This total size is determined both by the number of entities returned and the size of those entities. Given this it is normal that a query for a result set twice as large would take twice as long. The other thing to consider is that you should only be querying for fields that you are going to be using.
For instance, as explained in the best practices, if the only fields you care about are active and online then you could use a
projection query to retrieve only those fields.
I hope this helps answer your questions.