【发布时间】:2012-01-15 22:57:03
【问题描述】:
我正在尝试加速我的 Django 应用程序。我注意到的一个问题是外键关系的反向查找似乎效率不高。
例如,假设一个老师可以有很多学生,但一个学生只能有一个老师。可以将 ForeignKey 分配给将每个学生与老师联系起来的学生。在学生的 SQL 表中,名为teacher_id 的列跟踪学生的老师。
查询哪些学生有老师X时,必须扫描Student表的所有行才能得到整个查询集,这样似乎效率低下。
如果我对 Django 进行编程,以便每次将老师分配给学生时,都会更新教师表中的一个条目,例如 student_id_list;该学生的 ID 将附加到其他学生 ID 的逗号分隔列表中。
这样,当查询查找某位老师的所有学生时,我可以使用这个以逗号分隔的学生 ID 列表来查找学生,这样既快速(ID 是主键)又高效(不是每一行必须扫描学生表。)
Student 表中的teacher_id 列仍将被使用;数据只会被存储两次。
这会让我的应用程序更快吗?谢谢!
【问题讨论】:
-
无论如何不要重新发明索引!数据库针对它在这里发生的那种扫描进行了优化。这只有在你不检索相应的学生原始数据时才有意义,只使用它们的 ID(我认为这不是很有用!)
标签: django