MySQL和Django的近似查询计数。
项目描述
当使用MySQL时,对InnoDB表的所有行进行计数在大型InnoDB表上是非常昂贵的。这是一个当在不附加约束的情况下调用COUNT(*)时返回近似值的QuerySet的替代品。在其他所有情况下,它应该表现得与QuerySet完全相同。
此工具仅适用于MySQL,对所有其他引擎的行为正常。
安装
使用pip从PyPI安装包django-mysql-fuzzycount
$ pip install -U django-mysql-fuzzycount
用法
使用FuzzyCountQuerySet有几种方法。
您可以在Django模型上导入并使用提供的FuzzyCountManager
from django.db import models from mysql_fuzzycount.managers import FuzzyCountManager class Choice(model.Model): objects = FuzzyCountManager() # ...
然后,在没有任何约束的情况下对Choice模型进行计数,将近似总数
>>> Choice.objects.count() # approximation 100 >>> Choice.objects.filter(votes__gt=10).count() # not an approximation 28
另一个常见问题是模型在管理界面中的计数。有一个基本的ModelAdmin类,您可以在您的admin.py文件中继承,以防止在加载管理页面时执行昂贵的COUNT(*)查询。在您的模型的一个admin.py文件中
from django.contrib import admin from mysql_fuzzycount.admin import FuzzyCountModelAdmin from myapp.models import Choice class ChoiceAdmin(FuzzyCountModelAdmin): pass admin.site.register(Choice, ChoiceAdmin)
现在,当您加载Choice模型的管理页面时,分页计数将是大致的。
测试
它已在生产环境中进行了测试,但没有单元或集成测试。
许可证
版权©2013,Educreations,Inc,根据MIT许可证。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源分布
django-mysql-fuzzycount-0.4.tar.gz (4.1 kB 查看散列)
构建分布
关闭
散列 for django_mysql_fuzzycount-0.4-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | ef4538aead1f36b350331294e56d1f5e2e826188c5ba11b89f2df40cb226a1e0 |
|
MD5 | c4341e01f630ccfe6242e2be61383251 |
|
BLAKE2b-256 | 7ebd703ceabbe4de242ba73fe7e4f8e2c622b33e9aed618f7af4ab775487234b |