Примерное количество строк в 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
, так что если вы позже измените систему базы данных, вам не нужно переписывать менеджеров.