多对多与带过滤的外键的性能
Performance of ManyToMany vs ForeignKey with filteration
我正在做一个 DRF 项目,我对这两个选择之间的性能有疑问:
第一:在教师中有一个 ManyToManyField class。因此,要访问带教师的学生,我将访问 'students' 字段。
class Student(models.Model):
... student data ...
class Teacher(models.Model):
students = models.ManyToManyField(Student)
其次:我把老师作为外键放在学生中class。要检查老师的学生,我将使用 Student.objects.filter(teacher__id=id)
class Teacher(models.Model):
... teacher data ...
class Student(models.Model):
teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL)
哪个总体上更好,尤其是在数据库 (PostgreSQL) 方面。假设我有 100 万名学生和 10 万名教师。
注意:这只是我真实问题的一个例子。我的代码比这大得多我不想开始复制所有内容,因为我的问题只是关于性能。假设每个学生只能有一个老师,一个老师可以有多个学生。
最佳
提供的两个选项并不等同。第一个选项是 many-to-many 关系(每个学生可以有很多老师,每个老师可以有很多学生),而第二个选项代表 one-to-many 关系(每个学生只能有一个老师)。
所以,这两种数据方案解决的问题是不同的。
但如果你想谈论性能,如果实施得当,你应该不会觉得这些限制有太大差异。
我正在做一个 DRF 项目,我对这两个选择之间的性能有疑问:
第一:在教师中有一个 ManyToManyField class。因此,要访问带教师的学生,我将访问 'students' 字段。
class Student(models.Model):
... student data ...
class Teacher(models.Model):
students = models.ManyToManyField(Student)
其次:我把老师作为外键放在学生中class。要检查老师的学生,我将使用 Student.objects.filter(teacher__id=id)
class Teacher(models.Model):
... teacher data ...
class Student(models.Model):
teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL)
哪个总体上更好,尤其是在数据库 (PostgreSQL) 方面。假设我有 100 万名学生和 10 万名教师。
注意:这只是我真实问题的一个例子。我的代码比这大得多我不想开始复制所有内容,因为我的问题只是关于性能。假设每个学生只能有一个老师,一个老师可以有多个学生。
最佳
提供的两个选项并不等同。第一个选项是 many-to-many 关系(每个学生可以有很多老师,每个老师可以有很多学生),而第二个选项代表 one-to-many 关系(每个学生只能有一个老师)。
所以,这两种数据方案解决的问题是不同的。
但如果你想谈论性能,如果实施得当,你应该不会觉得这些限制有太大差异。