Форум сайта python.su
Всем доброго времени суток!
Есть две модели (на самом деле их больше, но не суть):
class FirstModel(models.Model):
name = models.CharField(max_length=500, blank=True, null=True)
short_name = models.CharField(max_length=100, blank=True, null=True)
url_address = models.CharField(max_length=250, blank=True, null=True)
title = models.CharField(max_length=500, blank=True, null=True)
H1 = models.CharField(max_length=500, blank=True, null=True)
H2 = models.CharField(max_length=500, blank=True, null=True)
description = models.CharField(max_length=1000, blank=True, null=True)
keywords = models.CharField(max_length=250, blank=True, null=True)
text_doc = models.TextField(blank=True, null=True)
changedate = models.DateField(auto_now=True, db_index=True)
book = models.ForeignKey(BooksModel)
page_id = models.IntegerField(editable=False)
parent_id = models.IntegerField(null=True)
visible_left = models.BooleanField()
page_level = models.IntegerField(editable=False)
num_for_sort = models.FloatField(editable=False)
comments = models.TextField(blank=True, null=True)
class SecondModel(models.Model):
title = models.CharField(max_length=100)
H1 = models.CharField(max_length=1000, blank=True, null=True)
url_address = models.CharField(max_length=250, blank=True, null=True)
snippet = models.CharField(max_length=500, blank=True, null=True)
description = models.CharField(max_length=300, blank=True, null=True)
text_doc = models.TextField(blank=True, null=True)
changedate = models.DateTimeField(auto_now=True)
type_document = models.ForeignKey()
visible_left = models.BooleanField()
visible_right = models.BooleanField(default=True)
visible_middle = models.BooleanField(default=True)
relation_kod = models.ManyToManyField(FirstModel, null=True, blank=True)
for_parsing = models.BooleanField()
А теперь сама проблема. После некоторого заполнения сайта вторая модель и в админке, и при загрузке на сайте очень сильно тормозит. Например, 10000 записей первой модели в админке загружаются намного быстрее, чем 1000 записей второй. При редактировании страница второй модели тоже может грузиться около 5 секунд. Хотел спросить может ли это быть из-за manytomany или же проблема в чем-то другом?
Офлайн
У вас все очень скудно с индексами. Во второй таблице их вообще нет.
Посмотрите в план запросов, скорее всего вы делаете какие-то выборки по неиндексированным полям и скорее всего (это из опыта джанги) вы пренебрегаете select_related, то есть у вам куча однотипных запросов вместо одного join, тут надо глядеть в debug_toolbar.
Офлайн
FishHook
У вас все очень скудно с индексами. Во второй таблице их вообще нет.Посмотрите в план запросов, скорее всего вы делаете какие-то выборки по неиндексированным полям и скорее всего (это из опыта джанги) вы пренебрегаете select_related, то есть у вам куча однотипных запросов вместо одного join, тут надо глядеть в debug_toolbar.
Офлайн
какая база? какие поля отображаются в админке? Включена ли там сортировка/отборы? По каким полям?
Офлайн
Jimbo
И джанговская админка тоже?
Меня она больше всего смущает.
Офлайн
inoks
какая база? какие поля отображаются в админке? Включена ли там сортировка/отборы? По каким полям?
Офлайн
Сейчас поставил индексы везде, где только можно.
Запросы стали примерно на 10% быстрее.
Офлайн
Jimbo
Сортировка по changedate.
changedate = models.DateTimeField(auto_now=True)
changedate = models.DateField(auto_now=True, db_index=True)
Офлайн
теперь подключите debug_toolbar и смотрите какие запросы летят к БД, скорее всего у вас не даляются джойны.
https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_select_related
Офлайн
FishHook
теперь подключите debug_toolbar и смотрите какие запросы летят к БД, скорее всего у вас не даляются джойны.
Офлайн