python - Django:模型索引太慢

标签 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

最佳答案

当你做的时候

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/

相关文章:

php - 如何在mysql中选择一行中的第一个空列

sql - 表移动到不同的表空间后是否需要移动本地索引

php - 如何将yii中的输入保存到数据库

python - 405 客户端错误 : Method Not Allowed for url: https://rinkeby. infura.io

python - "Select a valid choice."在 Django 中使用 Modelform 时出错

python - 在 pandas 列上应用条件以创建 bool 索引数组

python - 在 Python 中的复杂 for 循环中返回一次迭代

django - 如何重置 Django 管理员密码?

python - 如何使用Django显示在后端生成的图像

python - Kubernetes Python Pod分析