У меня проблема с приложением Django. Запросы по модели Scope чрезвычайно медленны, и после некоторой отладки я до сих пор не понял, где проблема.Django Query чрезвычайно медленный
Когда я запрашиваю db как scope = Scope.objects.get(pk='Esoterik I')
в django, это занимает 5-10 секунд. База данных содержит менее 10 записей и индекс первичного ключа. поэтому он слишком медленный. При выполнении эквивалентного запроса на db, как SELECT * FROM scope WHERE title='Esoterik I';
все в порядке, оно занимает всего около 50 мс.
Такая же проблема возникает, если я выполняю запрос с набором результатов, например scope_list = Scope.objects.filter(members=some_user)
, а затем выполняю, например. печать (scope_list) или итерация по элементам списка. Сам запрос занимает всего несколько мс, но отпечаток или итерация элементов повторяются как 5-10 секунд, но набор имеет только две записи.
База данных Backend - Postgresql. Проблема возникает на локальном сервере разработки и apache.
здесь код модели:
class Scope(models.Model):
title = models.CharField(primary_key=True, max_length=30)
## the semester the scope is linked with
assoc_semester = models.ForeignKey(Semester, null=True)
## the grade of the scope. can be Null if the scope is not a class
assoc_grade = models.ForeignKey(Grade, null=True)
## the timetable of the scope. can be null if the scope is not direct associated with a class
assoc_timetable = models.ForeignKey(Timetable, null=True)
## the associated subject of the scope
assoc_subject = models.ForeignKey(Subject)
## the calendar of the scope
assoc_calendar = models.ForeignKey(Calendar)
## the usergroup of the scope
assoc_usergroup = models.ForeignKey(Group)
members = models.ManyToManyField(User)
unread_count = None
обновление здесь выход питона профилировщика. кажется, что query.py получило название 1,6 миллиона раз, это слишком много.
У этой модели есть '__unicode __()' метод? не могли бы вы опубликовать его? –
yes it has: 'def __unicode __ (self): return self.title' – 7tupel
Я бы предложил установить [Django Debug Toolbar] (https://github.com/django-debug-toolbar/django-debug-toolbar), чтобы вы можете индивидуально просмотреть каждый запрос. Это даст вам гораздо лучшее представление о том, что замедляет вас. – JcKelley