我用来matches.query.__format__('')打印 Django 查询将执行的原始 SQL。
如果我直接执行该查询,psql则需要 5-10 毫秒,而下面计时的 Django 查询在第一次执行时可能会占用 100 毫秒。
损失 100 毫秒是很多(必须运行第二个查询 - 所以这是 2 x 100 毫秒 - 添加延迟,用户很容易注意到)。这是正常的吗?我错过了什么吗?
def api(request):
tag = request.GET.get('q', '')
matches = Relationship.objects.filter(keyword=tag, count__gte=3).order_by('-count')[:30]
print(matches.query.__format__('')) # get raw SQL query here
start_time = time.time()
print(matches) # lazy query executed here
print("Time elapsed {0:0.1f}ms".format((time.time() - start_time) * 1000))
mydict = serialize_matches(matches, tag)
return JsonResponse(mydict)
Run Code Online (Sandbox Code Playgroud)
更新:
感谢以下提示。Django 看起来不错,毕竟是数据库慢。我的一些psql查询非常快,因为结果已经被缓存。即使psql重新启动,似乎也会有一些缓存,这可能会混淆性能测试。
我发现 Django 很好,但我的数据库很慢。有些psql查询速度很快只是因为结果被缓存了。请注意,即使重新启动,似乎也会有一些缓存psql。
因此,当您测试数据库的性能时,请确保查询没有被缓存。
最后没有必要使用原始 SQL 查询,因为 Django ORM 在性能方面似乎很好。
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |