Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Django order_by导致查询速度非常慢_Mysql_Django - Fatal编程技术网

Mysql Django order_by导致查询速度非常慢

Mysql Django order_by导致查询速度非常慢,mysql,django,Mysql,Django,我有一个模型行,带有一个总值和一个组字段。 我使用以下代码获得给定组中具有最高值的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) 我的数据库非常大,有10多条线。group\u

我有一个模型
,带有一个
总值
和一个
字段。 我使用以下代码获得给定组中具有最高值的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)
我的数据库非常大,有10多条线。
group\u line
查询仅返回1000行

我的问题是执行
values\u list
查询大约需要2秒钟。 如果我取消订单,它几乎是即时的

订购1000件物品需要这么长时间是正常的吗?如何使此查询更快


我在Django 2.1.7上,有一个MySQL数据库。

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

class Line(models.Model):
    # …
    total_value = models.IntegerField(db_index=True)
类行(models.Model):
# …
total_value=models.IntegerField(db_index=True)
您还可以使用组合索引:

class Line(models.Model):
    # …
    total_value = models.IntegerField(db_index=True)

    class Meta:
        indexes = [
            models.Index(fields=['group', 'total_value'])
        ]
类行(models.Model):
# …
total_value=models.IntegerField(db_index=True)
类元:
索引=[
models.Index(字段=['group','total_value'])
]
这将促进过滤和值排序


更新索引的时间复杂度为~O(logn),与过滤等相当。检索通常也发生在~O(logn)中。

请提供相关模型。尝试在总值上添加索引field@Willem范昂森你想看什么?这是一个包含各种整型、文本字段和外键的模型。即使不是唯一的,我也可以使用total_值作为索引吗?@RyanPergent:是的,然后它将创建一个MUL索引。这样做了,现在排序是即时的:)