[英]Improving run time of simple query
大师:
我有一个非常简单的数据模型,它通过一个Interaction
将两种不同的User
关联起来:
# myapp/models.py
class C1(models.Model):
user = models.ForeignKey(User)
class C2(models.Model):
user = models.ForeignKey(User)
class Interaction(models.Model):
c1 = models.ForeignKey(C1)
c2 = models.ForeignKey(C2)
date = models.DateField()
所以,一个Interaction
具有User
类的C1
,一个User
类的C2
,和一个日期(除了主键,自动的整数); 给定的一对用户可以具有多个Interaction
。
我用2000个随机User
(每个类1000个)填充数据库,当我查询Interaction
,运行时间太慢(大约三秒钟-在生产环境中是不可接受的)。
我可以做些什么来改善此搜索的运行时间吗? 我应该以不同的方式定义Interaction
吗?
谢谢。
如果您想存储与用户有关的其他信息,则Django为此提供了一种方法来指定特定于站点的相关模型(称为“用户个人资料”)。
要使用此功能,请定义一个模型,该模型的字段中包含要存储的其他信息或您想使用的其他方法,还需要将模型中的OneToOneField添加到User模型。 这将确保只能为每个用户创建模型的一个实例。 例如:
# settings.py
AUTH_PROFILE_MODULE = 'myapp.UserProfile'
# myapp/models.py
class UserProfile(models.Model):
CLASS_CHOICES = (
(0, 'Yellow User'),
(1, 'Green User'),
)
user_class = models.IntegerField(choices=CLASS_CHOICES)
user = models.OneToOneField(User)
class Interaction(models.Model):
u1 = models.ForeignKey(User, related_name='u1s')
u2 = models.ForeignKey(User, related_name='u2s')
date = models.DateField()
为每个User类创建一个新模型和关联表似乎不是一个好的设计。
您已使用外键将C1, C2
与Users
相关联,并将其称为一对多关系 。 但是, Interaction
C1, C2
之间的关系不是一对多的,因为一个Interaction
可以与许多Users
相关联,而一个User
也可以具有与其相关联的许多Interactions
。 这称为多对多关系 ,并在Django模型中使用models.ManyToManyField
。
因此,请尝试将您的models.py
文件更改为-
class Interaction(models.Model):
ic1 = models.ManyToManyField(C1)
ic2 = models.ManyToManyField(C2)
date= models.DateField()
看看是否有帮助...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.