Django:想提高查询速度

时间:2011-04-18 09:32:35

标签: python mysql django views

我有一个django应用程序,显示每个客户端的项目列表。它显示项目ID,替代ID,标题和更多其他信息。因为我有很多项目(每个客户可能有数千项),所以加载所有项目可能需要很长时间。有没有办法提高这个速度?

def client_items(request, client_id = 0):
    client = None
    items = None
    try:
        client = models.Client.objects.get(pk = client_id)
        items = client.storageitem_set.all()
    except:
        return HttpResponse(reverse(return_clients))
    return render_to_response('items.html', {'items':items, 'client':client}, context_instance = RequestContext(request))

{% for item in items %}
        <tr class="items_table_row">
                <td><input type="checkbox" name="{{item.pk}}" value="{{item.pk}}" checked="checked"></td>
                <td>{{item.company_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td><td>{{item.type}}</td><td>{{item.format}}</td>
                <td><span id="{{item.pk}}" name="type">{{item.itemstatushistory_set.latest}}</span></td><td>{{item.itemstatushistory_set.latest.date.date|date:"d M Y"}}</td>
{% endfor %}

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

Paginate results比成千上万的项目更易于管理。没有分页它不仅速度慢,而且还提供糟糕的用户体验。

答案 2 :(得分:0)

确保使用恒定数量的数据库查询加载项目。对于大多数视图,您应该能够只读取一个数据库来加载所有数据。

如果您注意到查询数量的增加或减少取决于您显示的项目数量,您可能需要在查询集中包含select_related()。