i've run performance problem 1 of django views.
i use models resemble these example models:
class user(models.model): name = models.charfield(max_length=32) class post(models.model): author = models.foreignkey('user', related_name='posts') class comment(models.model): author = models.foreignkey('user', related_name='comments') in view need display how many posts , comments each user has written, , queryset so:
user.objects.annotate(post_count=count('posts', distinct=true), comment_count=count('comments', distinct=true)) this works expected, performance has become poor increased number of rows in database. have approximately:
users: 1300 comments: 4300 posts: 6200 and query takes approximately 400ms.
if remove either post_count or comment_count query, execution time drops down acceptable 10ms.
i suspect comes joining table, raises total number of rows 1300 * 4300 * 6200 instead of eg. 1300 * 4300.
but how circumvent problem, best solution store number of comments , posts in database field , make application logic take care of updating when needed?
Comments
Post a Comment