Django查询/ MySQL数据库优化

时间:2019-03-01 17:10:32

标签: mysql django

这是一个双重的问题-我对Django还是很陌生。我的应用程序使用Django与MySQL数据库进行接口并将数据提供给ReactJS前端。我正在尝试进行查询,以从某个列值中获取最新的条目(按时间)。例如:

class Cake(models.Model):
    bakery = models.CharField(Bakery)
    baked_at = models.DateTimeField()
    baker = models.ForeignKey(Baker)
    buyer = models.ForeignKey(Buyer)

如果我想在一个QuerySet中查找每个给定面包店名称的 all 最新蛋糕,那么运行哪种查询是一个很好的查询?目前我有类似的东西:

subquery = Cake.objects.filter(bakery=OuterRef('bakery')).order_by('-baked_at')
latest_cakes = Cake.objects.filter(baked_at=Subquery(subquery.values('baked_at')[:1]))

我的第二个问题是关于数据库/序列化优化。说,即使我只是序列化所有蛋糕或只是latest_cakes,如果要处理多达10,000个以上的条目,应该如何优化?

1 个答案:

答案 0 :(得分:0)

假设结果必须是一个记录(假设在一个baked_at日期时间仅烘焙了一个蛋糕):

latest_cake = Cake.objects.filter(baker=OuterRef('bakery')).order_by('-baked_at').first()

假设在同一日期时间烘焙了多个蛋糕,那么是的,您首先需要获取日期时间(您的代码在第二个查询集中重新过滤面包店的代码丢失了,否则几乎是相同的):

baked_at = Cake.objects.filter(bakery=OuterRef('bakery')).order_by('-baked_at').first().values('baked_at')
latest_cakes = Cake.objects.filter(bakery=OuterRef('bakery'), baked_at=baked_at)

您是否考虑过使用最近的N个蛋糕,或使用时间范围(一小时内烘烤的最新蛋糕)?

对于第二个问题,您确定需要一次获取所有10k记录吗?如果没有,请考虑using Pagination