Hi Jani,

That's a correct diagnosis. I knew Django was doing lazy loading, but 
didn't fully understand the implications.

In my case I have a filtered and ordered queryset resulting in ~400 
records. Upon processing in the template, each was prompting a database 
visit 3 times when outputting information: hence the ~1200 trips to the 
database.

I've added prefetch_related specifying the related models I'm working with 
in the template.

My 'slow' case has now become: 46 queries in 39 ms, Time: 506 ms: a factor 
of 20 speed improvement.

Thanks for the suggestion!
R.

On Sunday, January 4, 2015 10:09:58 PM UTC-8, Jani Tiainen wrote:

> By judging amount of queries of your "slow" page you probably have 
> model(s) with foreign keys that you lazy load - which means that each fk is 
> loaded individually from the database with separate query. 
>
> For example if you have a model that contains 4 foreign keys and you query 
> 100 instances (rows) you would actually invoke 1 + 4 * n queries, which in 
> example case would be 401. 
>
> Without actually knowning your code one of the first options you usually 
> do to optimize queries is to use select_related and prefetch_related 
> queryset methods to cut down number of queries needed. 
>
> -- 
>
> Jani Tiainen 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/3e081983-0d18-4197-8d7a-b78b069bfbd6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to