这个技巧会加速Django ForeignKey查找吗?

这个技巧会加速Django ForeignKey查找吗?,django,Django,我正在尝试加速我的Django应用程序。我注意到的一个问题是,外键关系的反向查找似乎效率不高 例如,想象一个场景,一名教师可以有许多学生,但一名学生只能有一名教师。你可以给一个学生分配一个外键,让每个学生都和老师联系起来。在学生的SQL表中,一个名为teacher\u id的列跟踪学生的老师 查询有教师X的学生时,必须扫描学生表的所有行以获得整个查询集,这似乎效率低下 如果我对Django进行编程,以便每次将教师分配给学生时,教师表中的一个条目都会更新,比如student\u id\u list

我正在尝试加速我的Django应用程序。我注意到的一个问题是,外键关系的反向查找似乎效率不高

例如,想象一个场景,一名教师可以有许多学生,但一名学生只能有一名教师。你可以给一个学生分配一个外键,让每个学生都和老师联系起来。在学生的SQL表中,一个名为
teacher\u id
的列跟踪学生的老师

查询有教师X的学生时,必须扫描学生表的所有行以获得整个查询集,这似乎效率低下

如果我对Django进行编程,以便每次将教师分配给学生时,教师表中的一个条目都会更新,比如
student\u id\u list
;学生ID将附加到以逗号分隔的其他学生ID列表中

这样,当查询查找教师的所有学生时,我可以使用这个以逗号分隔的学生ID列表来查找学生,这既快速(ID是主键)又高效(不是必须扫描学生表的每一行)

学生表中的教师id列仍将使用;数据只需存储两次


这会使我的应用程序更快吗?谢谢

我不确定,但看起来好像不对。因为你会得到每个学生都有一些ID——这将是N个到数据库的任务,其中N是一个教师的学生数量,而你可以根据教师ID筛选学生,这将是一个对整个学生数量的单一任务
它可以依赖于数据库中的索引,但它将是相同的“从‘学生’中选择…”

我不确定,但它看起来是错误的。因为你会得到每个学生都有一些ID——这将是N个到数据库的任务,其中N是一个教师的学生数量,而你可以根据教师ID筛选学生,这将是一个对整个学生数量的单一任务
它可以依赖于数据库中的索引,但它与“从‘学生’中选择”相同。

与其尝试破解数据库层以在数据库中携带额外的元数据,为什么不在数据库中创建适当的索引,或者如果没有帮助,请使用视图或存储过程的某种组合,并使用原始sql查询来调用它?

与其尝试破解数据库层以在数据库中携带额外的元数据,为什么不在数据库中创建适当的索引,或者如果没有帮助,请使用视图或存储过程的某种组合,并使用原始sql查询来调用它?

据我所知,您希望对数据库方案进行非规范化,以获得最佳查询性能。在这种情况下,我可以向您推荐专门为此目的设计的应用程序-

正如文件所说:

django composition提供了从 通过特殊的泛型模型以简单的声明方式创建模型 字段名为CompositionField

大多数数据非规范化的情况非常普遍,因此 django composition有几个“捷径”字段处理大多数 是的

CompositionField是提供数据接口的django模型字段 非规范化


据我所知,您希望对数据库方案进行非规范化,以获得最佳查询性能。在这种情况下,我可以向您推荐专门为此目的设计的应用程序-

正如文件所说:

django composition提供了从 通过特殊的泛型模型以简单的声明方式创建模型 字段名为CompositionField

大多数数据非规范化的情况非常普遍,因此 django composition有几个“捷径”字段处理大多数 是的

CompositionField是提供数据接口的django模型字段 非规范化


无论如何,不要重新发明索引!数据库针对此处发生的扫描类型进行了优化。这只有在您不检索相应的student Raw,只使用ID的情况下才有意义(我认为这不是很有用!)无论如何,不要重新创建索引!数据库针对此处发生的扫描类型进行了优化。这只有在您不检索相应的学生RAW时才有意义,只使用ID(我认为这不是很有用!)