У меня проблема с приложением Django. Запросы к модели Scope выполняются очень медленно, и после некоторой отладки я так и не понял, в чем проблема.
Когда я запрашиваю базу данных, например scope = Scope.objects.get(pk='Esoterik I')
, это занимает от 5 до 10 секунд. В базе данных менее 10 записей и индекс по первичному ключу, поэтому она слишком медленная. При выполнении эквивалентного запроса к базе данных, такого как SELECT * FROM scope WHERE title='Esoterik I';
, все в порядке, и это занимает всего около 50 мс.
Та же проблема возникает, если я запрашиваю набор результатов, например scope_list = Scope.objects.filter(members=some_user)
, а затем вызываю print(scope_list) или перебираю элементы списка. Сам запрос занимает всего несколько мс, но печать или итерация элементов снова занимает от 5 до 10 секунд, но набор имеет только две записи.
Серверная часть базы данных — 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
обновить
Вот вывод профилировщика python. Похоже, что query.py вызывался 1,6 миллиона раз — это слишком много.
__unicode__()
? не могли бы вы опубликовать это? - person Hieu Nguyen   schedule 31.07.2013def __unicode__(self): return self.title
- person 7tupel   schedule 31.07.2013DEBUG
верным или ложным в settings.py? - person Burhan Khalid   schedule 31.07.2013