代码之家  ›  专栏  ›  技术社区  ›  nigel222

空外键会减慢速度吗?

  •  0
  • nigel222  · 技术社区  · 2 年前

    我正在为我正在处理的项目中的某些对象实现文件附件。有六个左右的对象类可能合理地附加了文件(这些文件将在其详细信息视图中显示并通过链接进行管理)。模型应该是

    class JobFile( models.Model):
        
        job = models.ForeignKey( 'jobs.Job', models.SET_NULL,
                                null=True, blank=True, related_name='attachments', )
        quote = models.ForeignKey( 'quotation.Quote', models.SET_NULL, 
                                null=True, blank=True, related_name='attachments', )
        #etc
    
        document = models.FileField( ... )  # the attachment
    

    与通用ForeignKey相比,这种方法的一个优点是,上传可以同时附加到一种以上的对象。另一个是参考的简单性 obj.attachments.all() 在中 obj 局部视图。我不是在寻找这些文件可能附加到的一大组对象类。

    然而,对于任何一个文件附件,其大部分ForeignKeys都将为空。我看到过各种对null ForeignKeys的引用导致Django ORM查询缓慢。这有什么我需要关心的吗?

    如果有任何不同,这些对象将几乎完全通过 attachments 反向ForeignKey管理器。我唯一能看到的是需要显式过滤 JobLine.objects.filter(field__isnull=True) 是在管理上下文中查找“孤立”文件(这通常不应该发生)。

    0 回复  |  直到 2 年前