Django查询相对于原始SQL

时间:2018-05-22 14:52:47

标签: django

我使用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,似乎也会有一些缓存,这可能会混淆性能测试。

1 个答案:

答案 0 :(得分:0)

我发现Django很好,而我的数据库运行缓慢。某些psql查询之所以快速,仅仅是因为结果被缓存。请注意,即使重新启动psql,似乎也有一些缓存。

因此,在测试数据库性能时,请确保未缓存查询。

最后,没有必要使用原始SQL查询,因为Django ORM在性能方面似乎还不错。