我有一个包含 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/