gpt4 book ai didi

python - 如何在具有 60 个功能的 1000 万行数据库上加速 Django 查询聚合?

转载 作者:行者123 更新时间:2023-12-01 01:12:38 24 4
gpt4 key购买 nike

我在 psql 中有一个数据库表,其中包含 10,000,000 行和 60 列(特征)。我定义 Django 查询集如下:

MyQ=MyDataBase.objects.filter(Name='Mike', date=date(2018, 2, 11), 
Class='03')

只有 5 行满足上述过滤条件。但是当我尝试类似的事情时

MyQ.count() #which equals 5

MyQ.aggregate(Sum('Score'))['Score__sum'] #which equals 61

每次大约需要 3 分钟才能给我结果。这不是很奇怪吗?查询集不是应该通过只关注我们告诉它们关注的行来让生活变得更轻松吗?计算 5 行或对其中一个字段求​​和不得花费那么长时间。我做错了什么?

这个我也应该说。我第一次在这张 table 上尝试这段代码时,一切都很好,可能需要 1 秒才能得到结果,但现在 3 分钟真的很烦人。从那时起,我就没有更改数据库或代码中的任何内容。

最佳答案

通常,如果您要根据特定字段或字段数量过滤表,则应该在这些字段上创建索引。它允许数据库查询规划器在搜索/排序时采取更优化的路径。

看起来您正在使用问题中的 Postgres,因此您可以运行 SELECT * FROM pg_indexes WHERE tablename = 'yourtable';在 psql 中查看任何现有索引。

Django 可以在模型定义中为您创建这些索引。例如,您的型号 MyDatabase可能看起来像这样:

class MyDatabase(models.Model):
name = models.TextField(index=True)
date = models.DateField(index=True)
class = models.TextField(index=True)

这里有一些关于在 Django 模型上创建索引的更多阅读内容:gun.io/blog/learn-indexing-dammit

关于python - 如何在具有 60 个功能的 1000 万行数据库上加速 Django 查询聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54699469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com