mysql和django的近似查询计数。
django-mysql-fuzzycount的Python项目详细描述
使用mysql时,counting all rows在大型innodb表上非常昂贵。如果没有调用额外的约束,则该调用将返回一个近似值。在所有其他情况下,它的行为应该与queryset完全相同。
这只适用于mysql,对于所有其他引擎来说都是正常的。
用法
有几种方法可以使用FuzzyCountQuerySet。
您可以在您的django机型上导入并使用提供的FuzzyCountManager:
from django.db import models from mysql_fuzzycount.managers import FuzzyCountManager class Choice(model.Model): objects = FuzzyCountManager() # ...
然后,在没有任何约束的情况下对^ {TT6} $模型进行计数,将近似总计数:
>>> 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)
现在,当您为AD{TT6}$$加载ADMIN页时,分页的计数将是近似的。
测试
它已经在生产中测试过了,但是没有单元或集成测试。
许可证
版权所有©2013,Educreations,Inc,根据麻省理工学院许可。