Примерное количество строк в postgresql django

У меня есть база данных postgresql, связанная с django. В базе данных есть много больших таблиц, которые я хочу, чтобы их количество строк. Из-за большого размера таблиц выполнение занимает много времени.

Я обнаружил, что приблизительное количество может быть получено из pg_class, Есть ли способ сделать это в Django и не выполнять необработанный запрос?

1 ответ

Решение

Я предлагаю использовать выделенный пакет для этого имени django-postgres-fuzzycount [GitHub]. Этот пакет предоставляет менеджера, который будет выполнять быстрый подсчет.

Вы можете установить пакет с pip (например, в вашей местной среде):

$ pip install django-postgres-fuzzycount

Затем вы можете добавить `` к моделям, где вы хотите получить приблизительный счет:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

    #  ... (some fields) ...

    objects = models.Manager()
    approx = FuzzyCountManager()

и тогда вы можете приблизительно посчитать с:

SomeModel.approx.count()

Если ты .filter(..)Джанго вычислит действительное число, так как pg_class Таблица хранит только примерное количество строк для всей таблицы, поэтому:

SomeModel.approx.filter(foo=bar).count()

займет больше времени (в зависимости от индексов и т. д.).

Вы также можете "исправить" objects напрямую, но тогда получить реальное количество записей может быть сложнее:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

    #  ... (some fields) ...

    objects = FuzzyCountManager()

Также хорошо, что если вы измените внутреннюю базу данных, FuzzyCountManager(..) будет действовать как обычно Manager, так что если вы позже измените систему базы данных, вам не нужно переписывать менеджеров.

Другие вопросы по тегам