Hi, In addition to Bill's advice, it's worth noting that the IN query behind the scenes just ends up performing and aggregating multiple 'equals' queries.
>From http://code.google.com/appengine/docs/datastore/gqlreference.html: "*Note:* The IN and != operators use multiple queries behind the scenes. For example, the IN operator executes a separate underlying datastore query for every item in the list. The entities returned are a result of the cross-product of all the underlying datastore queries and are de-duplicated. A maximum of 30 datastore queries are allowed for any single GQL query." -Marzia On Tue, Sep 30, 2008 at 10:25 PM, Bill <[EMAIL PROTECTED]> wrote: > > Try using fetch instead of treating the GqlQuery object as an > iterable. If you had included a LIMIT or OFFSET clause, it would > automatically be retrieved by fetch. > So it would be something like: > > users = db.GqlQuery(toquery).fetch(limit=1000) > > See http://code.google.com/appengine/docs/datastore/queryclass.html > > You can also cache the query like rietveld. > See > http://code.google.com/p/rietveld/source/browse/trunk/codereview/models.py > and look at the gql method. > > > On Sep 30, 7:17 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > > my app is producing significantly high mcycles used results. i have > > debugged it and determined that the problem is in my for loop. So I > > tried two versions and both are too slow. > > > > Version 1: > > > > somestuff = ['cat', 'dog', 'cow']; > > > > toquery = "SELECT * FROM Animals Where id IN (" + somestuff + ")" > > users = db.GqlQuery(toquery) > > > > now i get a list of users that match that key and I do a for loop like > > this: > > > > for user in users: > > self.response.out.write(user.id) > > > > Gives me a lot of mcycles with a red hazard warning. If I remove the > > for loop the hazard goes away. The datastore query takes less then a > > second. > > > > VERSION 2 > > > > somestuff = ['cat', 'dog', 'cow']; > > > > for animal in somestuff: > > toquery = "SELECT * FROM Moodster Where id = '" + animal + '\'' > > for user in users: > > self.response.out.write(user.id) > > > > in the latter version I am doing many queries (in this case 3) but > > because there is only one user in users for each query (i make sure of > > this), it takes less mcycles and gets a faster response > > > > AM I DOING SOMETHING WRONG? > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---
