django 减少查询加载时间
django reduce query load time
我使用 nginx 作为服务器。
在使用 Django 加载简单的 html 页面时,无需任何查询,加载仅需 34 毫秒。
<html><body><h1> Test</h1></body></html>
如果运行 某些查询(查询中有 500 行)加载页面需要 4 秒。
views.py
def testing3(request):
context = User.objects.all()
return render_to_response('pages/index1.html', {'users': context,})
index1.html
<html>
<head> <title>Testing </title> </head>
<body>
Testing
<h1>Testing</h1>
{% for e in users %}
<table>
<tr> <td class="active">{{ e.username }}</td>
<td>{{ e.email }}</td> </tr>
</table>
{% endfor %}
</body>
</html>
如何减少加载时间。
如何减少这个等待时间?
首先:优化您的数据库查询。
如果您只想显示几个数据库字段(在您的示例中为 user.username
和 user.email
)并且不需要任何模型方法,请改用 ValuesQuerySet
:
def myview(request):
users = User.objects.values("username", "email")
return render_to_response('pages/index1.html', {'users': users,})
如果您需要相关对象,请在查询中使用 "select_related" 关键字参数以避免 "n+1 queries" 问题。
完成此操作后,如果您查询 returns 数百条或更多记录,您需要 paginate 查询集。这对于查询集特别有效,因为它使用 SQL offset
和 limit
子句,因此分页实际上是在数据库级别完成的。
在这一点上,您应该至少在 ORM/db 水平上有了显着的提升。如果渲染本身(模板级别)仍然需要太多时间,那么是时候考虑使用 cache.
我使用 nginx 作为服务器。
在使用 Django 加载简单的 html 页面时,无需任何查询,加载仅需 34 毫秒。
<html><body><h1> Test</h1></body></html>
如果运行 某些查询(查询中有 500 行)加载页面需要 4 秒。
views.py
def testing3(request):
context = User.objects.all()
return render_to_response('pages/index1.html', {'users': context,})
index1.html
<html>
<head> <title>Testing </title> </head>
<body>
Testing
<h1>Testing</h1>
{% for e in users %}
<table>
<tr> <td class="active">{{ e.username }}</td>
<td>{{ e.email }}</td> </tr>
</table>
{% endfor %}
</body>
</html>
如何减少加载时间。
如何减少这个等待时间?
首先:优化您的数据库查询。
如果您只想显示几个数据库字段(在您的示例中为 user.username
和 user.email
)并且不需要任何模型方法,请改用 ValuesQuerySet
:
def myview(request):
users = User.objects.values("username", "email")
return render_to_response('pages/index1.html', {'users': users,})
如果您需要相关对象,请在查询中使用 "select_related" 关键字参数以避免 "n+1 queries" 问题。
完成此操作后,如果您查询 returns 数百条或更多记录,您需要 paginate 查询集。这对于查询集特别有效,因为它使用 SQL offset
和 limit
子句,因此分页实际上是在数据库级别完成的。
在这一点上,您应该至少在 ORM/db 水平上有了显着的提升。如果渲染本身(模板级别)仍然需要太多时间,那么是时候考虑使用 cache.