我最近正在使用 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
。
最佳答案
当你做的时候
mol_100000 = all_mols[100000]
Django 从 CompoundStructures.objects.all()
计算 QuerySet
这总是很慢,因为您获取了所有摩尔,现在想要第 100000 个摩尔,这是合乎逻辑的。
如果您想从全部数百万行中获取一 (1) mol,那么在使用数据库和 Django 的 ORM 时,.get(id=100000)
是您唯一的选择。
这里使用 .get()
并不比您现在尝试做的成本更高,即。获取所有内容,然后评估 QuerySet。
关于python - Django:模型索引太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222355/