我使用matches.query.__format__('')
来打印Django查询将执行的原始SQL。
如果我直接在psql
执行该查询,则需要5-10ms,而下面定时的Django查询在第一次执行时可能需要100ms。
丢失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)
更新:
感谢下面的提示。 Django看起来很好,毕竟数据库速度很慢。由于结果已经缓存,我的一些psql
查询非常快。即使重新启动psql
,似乎也会有一些缓存,这可能会混淆性能测试。
答案 0 :(得分:0)
我发现Django很好,而我的数据库运行缓慢。某些psql
查询之所以快速,仅仅是因为结果被缓存。请注意,即使重新启动psql
,似乎也有一些缓存。
因此,在测试数据库性能时,请确保未缓存查询。
最后,没有必要使用原始SQL查询,因为Django ORM在性能方面似乎还不错。