Сбой индексации Postgres в Django

Пробовал установить db_index=True, HashIndex и BrinIndex, ничего не работает, индексирует по Seq Scan, в базе данных 1000 записей, все миграции завершены. Код модели:

from django.db import models
from django.utils import timezone
from django.contrib.postgres.indexes import BrinIndex, HashIndex


class Contact(models.Model):
    phone = models.CharField(max_length=50, unique=True)
    address = models.CharField(max_length=50)

    def __str__(self):
        return self.phone


class Department(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.name


class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    about = models.CharField(max_length=10000,db_index=True)
    age = models.SmallIntegerField(null=True)
    created = models.DateTimeField(default=timezone.now)
    work_experience = models.SmallIntegerField(default=0, null=True)
    contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)
    department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None, null=True)

    class Meta:
        indexes = (
            BrinIndex(fields=('created',), name="hr_employee_created_ix",
                    pages_per_range=2
                    ),
        )

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

Я попробовал эти фильтры:

employees = Employee.objects.filter(created__year__lte=2022)
employees = Employee.objects.filter(about__contains='Test')

1000 записей - это очень небольшое количество записей.

При таком масштабе Postgres может решить, что последовательное сканирование будет быстрее, поскольку при индексном сканировании возникают дополнительные затраты.

https://www.postgresql.org/docs/current/indexes.html

Вернуться на верх