mysql - 为什么我的列在 Django Admin 中排序很慢,只有 1 个问题表

标签 mysql django optimization admin

我有一个包含 10K+ 条记录的表 (MySQL)。不是一张很大的 table 。当使用 Django 管理中的表(默认排序顺序)时,页面加载速度非常快。很难注意到。

但是,如果我尝试按任何列(例如 ID 列甚至日期列)进行排序,则可能需要一分钟多的时间才能返回结果。 其他表工作正常

有什么线索吗?

如果需要更多信息,请在我的问题中添加评论,以便我知道要添加什么。

谢谢。

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

最佳答案

您需要数据索引。

db_index=True添加到您经常想要排序的字段中。

即。更改:

models.DateField(auto_now_add=True)

至:

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

不要添加超出实际需要的索引,因为它们会减慢对表的插入和对受影响列的更新。

索引数据库的方法远不止这些,但这可能是针对您的特定问题的快速解决方案。

关于mysql - 为什么我的列在 Django Admin 中排序很慢,只有 1 个问题表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3016095/

相关文章:

mysql - 从 MySQL 到 CSV 文件的列名

MySQL 错误代码 1292 第 1 行列的日期值不正确 1999

python - Celery .delay() 同步工作,不延迟

python - Pycharm 失去了 View 和模板之间的连接

c++ - 我怎样才能优化我的程序?

设置壁纸的Android代码耗时太长

php - 我怎样才能按日期订购?

mysql - 如何创建父表和两个子表mysql

django - 如何在 django 模板中管理 Javascript 模块?

javascript - 如何在switch语句中进行代码优化