Django Pagination对于大型数据集来说太慢了

时间:2016-01-12 09:57:51

标签: python mysql django database pagination

我有关于Django的分页的问题。当我尝试对超过200k的记录进行分页时,门户网站的加载速度非常慢(> 10秒),我想要使用大约200万条记录。

我无法在Stackoverflow或其他网站上找到针对此问题的GOOD特定修复程序。每当代码获取一个页面时,它就会执行QuerySet,它会遍历一个非常大的数据集,使其变慢。

有人知道可以做些什么吗?我到处搜索过,无法解决这个问题。下面我将代码发布到paginate。 Paper_list是:model.object.all()。filter(category = x)(现在大约有200k个对象(它们都属于那个类别)。

def paginate_context(paper_list, request, context, source, author, title, term, date):
num_papers = len(paper_list) 
paginator = Paginator(paper_list, 4) # Show X papers per page
page = request.GET.get('page')
try:
    papers = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    papers = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    papers = paginator.page(paginator.num_pages)      
context['papers'] = papers
context['num_papers'] = num_papers
context['query_cat'] = create_request_str_and(context['cat'], source, author, title, term, date)

1 个答案:

答案 0 :(得分:2)

正如我在代码中看到的,num_papers = len(paper_list)方法评估查询,因此可能妨碍性能。您可以将其更改为:

num_papers = paper_list.count()

您可以在此处查看评估查询集的时间:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#when-querysets-are-evaluated