Django:模型索引太慢了

时间:2013-08-14 02:39:45

标签: python database django

我最近用Django构建了一个化合物数据库。我在处理模型遍历时遇到了麻烦。以下是我的问题:

型号:

class CompoundStructures(models.Model):
    molregno           = models.CharField(max_length=27L, primary_key=True)
    molfile            = models.TextField(blank=True)
    standard_inchi     = models.TextField(blank=True)
    standard_inchi_key = models.CharField(max_length=27L, unique=True)
    canonical_smiles   = models.TextField(blank=True)
    molformula         = models.CharField(max_length=100L, blank=True)

    class Meta:
        db_table = 'compound_structures'

    def __unicode__(self):
        return self.molformula

此模型的数据库中有1,000,000多条记录: 我运行这样的代码:

all_mols = CompoundStructures.objects.all()

mol_0 = all_mols[0]                 //quick
mol_100 = all_mols[100]            //normal
mol_10000 = all_mols[10000]       //slow 
mol_100000 = all_mols[100000]    //really slow!

为什么随着指数变大,它变得慢得多? 这使我无法遍历CompoundStructures

1 个答案:

答案 0 :(得分:1)

当你在做什么

mol_100000 = all_mols[100000]

Django从CompoundStructures.objects.all()

评估QuerySet

这总是很慢,因为你拿走了所有的摩尔,现在想要100000摩尔,这是合乎逻辑的。

如果你想从整个数百万行中获取一(1)mol,那么使用数据库和Django的ORM时.get(id=100000)是你唯一的选择。

在这里使用.get()并不比你现在尝试做的更昂贵,即。获取所有,然后评估QuerySet。