Django查询相对于原始SQL的速度较慢

问题描述 投票:4回答:1

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

django
1个回答
0
投票

我发现Django很好,我的数据库很慢。一些psql查询很快,因为结果被缓存。请注意,即使重新启动psql,似乎也会有一些缓存。

因此,当您测试数据库的性能时,请确保不缓存查询。

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

© www.soinside.com 2019 - 2024. All rights reserved.