Почему мои столбцы сортируются медленно в Django Admin, только 1 таблица проблем - PullRequest
0 голосов
/ 10 июня 2010

У меня есть таблица (MySQL) с 10K + записей.Не огромный стол.При работе с таблицей в Django's Admin, порядке сортировки по умолчанию, страница загружается быстро.Вряд ли заметно.

Но если я попытаюсь выполнить сортировку по любому столбцу, например по столбцу идентификатора или даже столбцу даты, для возврата результатов может потребоваться больше минуты. Другие таблицы работают нормально

Любые подсказки?

Если вам нужна дополнительная информация, добавьте комментарий к моему вопросу, чтобы я знал, что добавить.Спасибо.

class Link(models.Model):
    from_page        = models.ForeignKey(Page, related_name='linked_to_set')
    to_page          = models.ForeignKey(Page, related_name='linked_from_set')
    data_source      = models.ForeignKey(Data_Source)
    moz_rank         = models.FloatField(blank=True, null=True, default=None)
    raw_score        = models.FloatField(blank=True, null=True, default=None)
    date             = models.DateField(auto_now_add=True)
    anchor_text      = models.TextField(blank=True, default='')
    hover_text       = models.TextField(blank=True, default='')
    no_follow        = models.BooleanField(blank=True, default=False)
    same_subdomain   = models.BooleanField(blank=True, default=False)
    meta_refresh     = models.BooleanField(blank=True, default=False)
    same_ip_address  = models.BooleanField(blank=True, default=False)
    same_c_block     = models.BooleanField(blank=True, default=False)
    redirect_301     = models.BooleanField(blank=True, default=False)
    redirect_302     = models.BooleanField(blank=True, default=False)
    no_script        = models.BooleanField(blank=True, default=False)
    off_screen       = models.BooleanField(blank=True, default=False)
    meta_no_follow   = models.BooleanField(blank=True, default=False)
    same_root_domain = models.BooleanField(blank=True, default=False)
    feed_autodiscovery = models.BooleanField(blank=True, default=False)
    rel_canonical      = models.BooleanField(blank=True, default=False)
    via_301            = models.BooleanField(blank=True, default=False)
    def __unicode__(self):
        return self.to_page.url

1 Ответ

1 голос
/ 10 июня 2010

Вам нужны индексы для ваших данных.

Добавьте db_index=True к полям, по которым вы часто хотите сортировать.

Т.е.. изменить:

models.DateField(auto_now_add=True)

до:

models.DateField(auto_now_add=True, db_index=True)

Не добавляйте больше индексов, чем вам действительно нужно, потому что они замедляют вставки в таблицу и обновления в затронутых столбцах.

Индексация баз данных намного шире, чем эта, но это может быть быстрым решением для вашей конкретной проблемы.

...