I'm a little confused by your answer and the concept of "zigzag
joins". In practice, assuming the result set will end up being the
same, is any of these 2 queries faster / better and why exactly?

query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
prime = TRUE ORDER BY timestamp DESC", self.user.key())

query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
initialized = TRUE AND prime = TRUE ORDER BY timestamp DESC",
self.user.key())

Regarding the 2nd set of queries I asked about, all things being
equal, is it better to do the query with or without the ANCESTOR?
Intuitively, I would expect the ANCESTOR version to perform faster as
it would only run on 1 machine / entity group, but is this true?

In the data model, Photo is a child of User and there 1000's more
photos than users. Otherwise, I haven't measured performance in the
app yet, I'd rather rely on some "official" best practices for now :)

On Jul 7, 6:25 pm, "Ikai Lan (Google)" <ika...@google.com> wrote:
> Ancestor queries don't add significant overhead, so I'm not going to
> consider that factor.
>
> As far as other queries go, in general fewer indexed mean better performance
> if you are doing zigzag join. However - if an index contains a small number
> of results, obviously the query will return faster because there are simply
> less results. Otherwise, you end up zig zagging across more indexes, which
> probably will result in slower queries. It really depends on the shape of
> your data. What have your obvservations been?
>
> Ikai Lan
> Developer Programs Engineer, Google App Engine
> Blog:http://googleappengine.blogspot.com
> Twitter:http://twitter.com/app_engine
> Reddit:http://www.reddit.com/r/appengine
>
>
>
>
>
>
>
> On Thu, Jul 7, 2011 at 6:21 PM, Pol <i...@pol-online.net> wrote:
> > Hi,
>
> > Assuming the app runs on an HR database and that the number of indexes
> > is not a problem:
>
> > Say that because of the data model, these queries are equivalent (i.e.
> > return the exact same results), which one should be used to get the
> > best performance?
>
> > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
> > prime = TRUE ORDER BY timestamp DESC", self.user.key())
>
> > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
> > initialized = TRUE AND prime = TRUE ORDER BY timestamp DESC",
> > self.user.key())
>
> > Does the response change if somewhere else in the code, there is also
> > this query (because of shared indexes or something)?
>
> > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
> > initialized = TRUE ORDER BY timestamp DESC", self.user.key())
>
> > Same question, this time with these 2 other queries:
>
> > query = db.GqlQuery("SELECT * FROM Photo WHERE event = :1 AND prime =
> > TRUE AND hidden = FALSE ORDER BY timestamp DESC", event.key())
>
> > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND
> > event = :2 AND prime = TRUE AND hidden = FALSE ORDER BY timestamp
> > DESC", event.key().parent(), event.key())
>
> > I understand the 2nd version is an ancestor query which should return
> > consistent results (right?) but in this case, it's ok if the results
> > are a bit stalled.
>
> > Thanks!
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Google App Engine" group.
> > To post to this group, send email to google-appengine@googlegroups.com.
> > To unsubscribe from this group, send email to
> > google-appengine+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/google-appengine?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to