gpt4 book ai didi

mysql - Django order_by 导致查询很慢

转载 作者:行者123 更新时间:2023-12-05 04:59:21 25 4
gpt4 key购买 nike

我有一个模型 Line,其中包含一个 total_value 和一个 group 字段。我使用以下代码获取给定组中具有最高值的 10 行:

group_lines = Line.objects.filter(group_id=group_pk, total_value__gt=0)
sorted_lines = group_lines.order_by('-total_value')[:10]
ids = lines.values_list("id", flat=True)

我的数据库非常大,有 1000 万行以上。 group_lines 查询单独返回 1000 行。

我的问题是 values_list 查询需要大约 2 秒才能执行。如果我删除排序,它几乎是即时的。

订购 1000 件元素需要那么长时间是否正常?我怎样才能使这个查询更快?

我在 Django 2.1.7 上使用 MySQL 数据库。

最佳答案

您可以在数据库字段上添加索引。对于大多数数据库,这将使用 B 树,这将显着提高排序:

class Line(models.Model):
# …
total_value = models.IntegerField(<b>db_index=True</b>)

你也可以使用组合索引:

class Line(models.Model):
# …
total_value = models.IntegerField(<b>db_index=True</b>)

class Meta:
<b>indexes</b> = [
models.Index(<b>fields=['group', 'total_value']</b>)
]

这将促进对值的过滤和排序。

更新索引的时间复杂度 ~O( log N) 与过滤等类似,检索通常发生在 ~O( 也记录 N)

关于mysql - Django order_by 导致查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63538670/

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