为什么在django模型中添加索引会减慢执行时间?

r8xiu3jd  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(116)

我已经将索引添加到我的django模型中,以便使其上的查询更快一点,但实际上执行时间增加了:

from autoslug import AutoSlugField
from django.db import models

class City(models.Model):
    name = models.CharField(max_lenght=30)
    population = models.IntegerField()
    slug = AutoSlugField(populate_from="name")

    class Meta:
        indexes = [models.Index(fields=['slug'])]

我用这个函数来计算CBV的执行时间:

def dispatch(self, request, *args, **kwargs):
    start_time = timezone.now()
    response = super().dispatch(request, *args, **kwargs)
    end_time = timezone.now()
    execution_time = (end_time - start_time).total_seconds() * 1000
    print(f"Execution time: {execution_time} ms")
    return response

在将indexes添加到Meta类之前,我的CBV中City.objects.all()的执行时间是:

Execution time: 190.413 ms

但添加后,它变成了:

Execution time: 200.201 ms

你知道为什么会这样吗?也许在slug字段上使用索引是不可取的?

bmp9r5qi

bmp9r5qi1#

我认为这是因为.all()在其查询中不使用slug字段,因此在这种情况下添加该字段实际上没有好处,而是多余的。

相关问题