我想加快我的Django应用程序。我注意到的一个问题是,对外键关系的反向查找似乎效率不高。这个技巧会加速Django的ForeignKey查找吗?
例如,假设一个老师可以有很多学生的情景,但是一个学生只能有一个老师。可以将ForeignKey分配给将每个学生与老师关联起来的学生。在学生的SQL表中,名为teacher_id
的列跟踪学生拥有哪位教师。
查询哪个学生有X教师时,必须扫描Student表的所有行以获取整个查询集,这看起来效率不高。
如果我对Django进行编程,以便每次将老师分配给学生时,如何更新教师表中的条目,例如student_id_list
;学生的ID将被附加到以逗号分隔的其他学生ID列表中。
这样,当一个查询查找老师的所有学生时,我可以使用这个以逗号分隔的学生ID列表来查找学生,这是快速的(ID是主键)和有效的(不是每一行的学生表必须被扫描。)
Student表中的teacher_id列仍将被使用;数据只会被存储两次。
这会使我的应用程序更快吗?谢谢!
无论如何不要重新编制索引!数据库针对在此发生的扫描进行了优化。这只有在你不检索相应的学生原料时才有意义,只能使用它们的ID(我认为这不是很有用!) – Stefano 2012-01-15 12:19:09