mysql - Is it faster to follow relations in a query parameter or using model attribute lookup in Django Models? -


say have 3 django models:

  • user,
  • staff one-to-one user,
  • thing many-to-one staff on 'owner' field.

using mysql database, of these performs better?

thing.objects.filter(owner=user.staff)  # thing.objects.filter(owner__user=user)  # b 

what if checking thing want owned user:

try:     thing.objects.get(id=some_id, owner=user.staff)  # d     thing.objects.get(id=some_id, owner__user=user)  # e except thing.doesnotexist:     return none else:     pass # stuff  # or f: thing = thing.objects.get(id=some_id) if thing.owner.user != user:     return none pass # stuff 

it depends on how got original objects , you've done them since. if you've accessed user.staff, or queried user select_related, first query better simple select on 1 table, whereas second join user table.

however, if have not accessed user.staff , did not via select_related, first expression cause user.staff evaluated, triggers separate query, before doing thing lookup. in case second query preferable, since single query join better 2 simple queries.

note micro-optimization , have little impact on overall run time.


Comments

Popular posts from this blog

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

android - How to create dynamically Fragment pager adapter -

1111. appearing after print sequence - php -