postgresql django 中的近似行数
approximate count of rows in postgresql django
我有一个与 django 连接的 postgresql 数据库。在数据库中有很多大表,我想要它们的行数。由于表很大,这需要很多时间来执行。
我发现可以从 pg_class
中检索到大概的计数。在 Django 中有什么办法不执行原始查询吗?
我建议为这个名为 django-postgres-fuzzycount
[GitHub] 使用专用包。这个包提供了一个管理器来进行快速计数。
您可以使用 pip
安装软件包(例如在您的本地环境中):
$ pip install django-postgres-fuzzycount
然后您可以将FuzzyCountManager
添加到您想要获得近似计数的模型中:
from django.db import models
from fuzzycount import <b>FuzzyCountManager</b>
class SomeModel(models.Model):
# ... (some fields) ...
objects = models.Manager()
<b>approx</b> = FuzzyCountManager()
然后你可以近似地计算:
SomeModel.approx.count()
如果你 .filter(..)
,Django 将计算 真实的 数字,因为 pg_class
table 仅存储近似的行数对于 整个 table,所以:
SomeModel.approx.filter(foo=bar).count()
将花费更多时间(取决于索引等)。
您也可以直接“修补”objects
管理器,但是获取真实 条记录可能会比较困难:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
<b>objects</b> = FuzzyCountManager()
如果您将后端数据库更改为另一个数据库,FuzzyCountManager(..)
将充当 普通 Manager
,这也很好,因此以防万一你以后改了数据库系统,就不用重写managers了。
我有一个与 django 连接的 postgresql 数据库。在数据库中有很多大表,我想要它们的行数。由于表很大,这需要很多时间来执行。
我发现可以从 pg_class
中检索到大概的计数。在 Django 中有什么办法不执行原始查询吗?
我建议为这个名为 django-postgres-fuzzycount
[GitHub] 使用专用包。这个包提供了一个管理器来进行快速计数。
您可以使用 pip
安装软件包(例如在您的本地环境中):
$ pip install django-postgres-fuzzycount
然后您可以将FuzzyCountManager
添加到您想要获得近似计数的模型中:
from django.db import models
from fuzzycount import <b>FuzzyCountManager</b>
class SomeModel(models.Model):
# ... (some fields) ...
objects = models.Manager()
<b>approx</b> = FuzzyCountManager()
然后你可以近似地计算:
SomeModel.approx.count()
如果你 .filter(..)
,Django 将计算 真实的 数字,因为 pg_class
table 仅存储近似的行数对于 整个 table,所以:
SomeModel.approx.filter(foo=bar).count()
将花费更多时间(取决于索引等)。
您也可以直接“修补”objects
管理器,但是获取真实 条记录可能会比较困难:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
<b>objects</b> = FuzzyCountManager()
如果您将后端数据库更改为另一个数据库,FuzzyCountManager(..)
将充当 普通 Manager
,这也很好,因此以防万一你以后改了数据库系统,就不用重写managers了。