Оптимизировать Django запрос - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть модель в моем Django проекте:

class AmazonSearchFrequency(models.Model):
    keyword_name = models.CharField(max_length=500)
    frequency = models.PositiveIntegerField(default=0)

В этой таблице хранится около 2 миллионов строк данных, но всякий раз, когда я выполняю поисковый запрос, например

AmazonSearchFrequency.objects.filter(keyword_name=keyword)

выполнение запроса занимает много времени.

Есть ли способ в Django оптимизировать этот запрос?

1 Ответ

3 голосов
/ 19 февраля 2020

Всегда index столбцы, которые вы будете использовать в фильтрах позже. Именно так базы данных могут значительно ускорить поиск. Без индекса БД должен go проходить через каждую строку!

В вашем случае это будет выглядеть следующим образом:

class AmazonSearchFrequency(models.Model):
    keyword_name = models.CharField(max_length=500)
    frequency = models.PositiveIntegerField(default=0)

    class Meta:
        indexes = [
            models.Index(fields=['keyword_name'], name='keyword_name_idx'),
        ]

Не забудьте выполнить миграцию и выполнить миграцию после добавления индекса.

Примечание: первичные ключи, внешние ключи и поля, установленные как unique или unique_together, индексируются по умолчанию, их добавлять не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...