繁体   English   中英

改善简单查询的运行时间

[英]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, C2Users相关联,并将其称为一对多关系 但是, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM